Laden...
P
prakti08 myCSharp.de - Member
Werkstudent Softwareentwickler Trier Dabei seit 04.07.2008 321 Beiträge
Benutzerbeschreibung

Forenbeiträge von prakti08 Ingesamt 321 Beiträge

20.10.2008 - 12:06 Uhr

Evtl. kann es sein, daß das Formular erst einmal angezeigt werden müßte, bevor die Controls sichtbar werden... dann wäre dieser Ansatz doch nicht so einfach umzusetzen.

genau daran liegts.. 🙁
kann man das nicht irgendwie umgehen... ich habs jetzt einfach mal

...
form.visible = true;
form.visible = false;
...

umgesetzt.... das fenster wird für eine millisekunde aufgepoppt und dann erscheint der tooltip... geht zwar ist aber unschön...

20.10.2008 - 11:46 Uhr

hmm... weiß nicht warum, aber es lag nochmal an der zuweisung des bestehenden bitmaps


image = VToolNG.Properties.Resources.tooltip3;

nach löschen dieser zeile wurde die richtige größe angezeigt....

leider wird die form angezeigt ohne die darauf befindenden controls...

eigentlich sind labels, picturebox und datagridview darauf... wird aber leer angezeigt...

20.10.2008 - 11:17 Uhr

Der Fehler liegt in der erzeugung der Bitmap...

m_infoWindow.DrawToBitmap(info,new Rectangle(new Point(0,0),new Size(500,500)));

trotz diesem aufruf ist die bitmap nur 4545 groß statt 500500....
warum ist das so?

20.10.2008 - 09:00 Uhr

Ich hab den fehler gefunden...
es waren 2 mal resourcen in dem project vorhanden, wobei das eine wohl das andere überschrieben hat....

jetzt hänge ich an einem anderen problem....
ich lege ein tooltip an:

tip = new ToolTip();
                    tip.OwnerDraw = true; 
                    tip.Draw += new DrawToolTipEventHandler(tip_Draw);
                    tip.Popup += new PopupEventHandler(tip_Popup);

dann lade ich die form als bitmap:

Image image = new Bitmap(200,200);
                    image = VToolNG.Properties.Resources.tooltip3;
                    info = new Bitmap(image);
                    m_infoWindow.DrawToBitmap(info,new Rectangle(new Point(0,0),new Size(500,500)));

dann lasse ich mir das bild als tooltip anzeigen:

void tip_Draw(object sender, DrawToolTipEventArgs dea)
        {
           dea.DrawBackground();
           dea.Graphics.DrawImage(info,0,0);
        }

        private void tip_Popup(object sender, PopupEventArgs e)
        {

            e.ToolTipSize = new Size(500, 500);
        }

das ergebnis im Dateianhang....
warum wird mir nur so ein kleiner teil angezeigt?
hab ich was falsch gemacht?

Edit: Die größen sind willkürlich gewählt...

17.10.2008 - 08:33 Uhr

hmm.. jetzt bin ich aber verwundert...
bekomm jetzt zwar das bild als resource angezeigt, aber image bleibt null nach dem laden...

info = new Bitmap(image);

was mir in dieser zeile ne exception wirft..

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Edit: wenn ich über den pfad gehe funktioniert alles super 🙁

17.10.2008 - 08:27 Uhr

oh.. sorry.. nicht nachgedacht....
hab die bilder manuell hinzugefügt und nciht über ressource hinzufügen...
geht jetzt denke ich mal 🙂

17.10.2008 - 08:24 Uhr
  
Image image = MeinNamespace.Properties.Resources.FooBar;  
  

Ansonsten ist die Klasse ResourceManager ein Blick wert.

Steht darin die antwort? Der erste Teil läuft nicht:

Fehler 3 "VToolNG.Properties.Resources" enthält keine Definition für "tooltip2". C:\Projekte\VToolNG\trunk\VToolNG\Views\DummySearchWindow.cs 885 58 VToolNG

und teil 2 auch nciht... die einzigen methoden die mir angeboten werden und nützlich sein könnten, sind:

getObject() und getStream(), wobei beide nur null zurückliefern.

16.10.2008 - 10:07 Uhr
image = (System.Drawing.Image)VToolNG.Properties.Resources.ResourceManager.GetObject("tooltip.bmp");

nach dieser zuweisung ist image = null und somit kann ich damit nicht arbeiten... wenn ich über den Pfad gehe, funktionierts aber...

16.10.2008 - 08:54 Uhr

hmm.. klappt nicht so ganz wie ich möchte....

ich habe noch 2 fragen...

meine bilder die ich in meinem programm verwende habe ich in einen ordner resourcen gezogen...
am liebsten würde ich jetzt über

resourcen.getObject("tooltip.bmp")

darauf zugreifen...
geht leider nicht.. muss über c:.......\tooltip.bmp sonst kommt fehlermeldung
...wurde nicht auf eine objektinstanz festgelegt....
kann man das irgendwie noch anders machen als über den kompletten pfad?
oder das Image einfach nur im zwischenspeicher lagern und nciht auf festplatte speichern?
wenn ich

Image image = new Image();

anlegen möchte kommt..

Fehler 3 Es konnte keine Instanz der abstrakten Klasse oder Schnittstelle "System.Drawing.Image" erstellt werden. C:\Projekte\VToolNG\trunk\VToolNG\Views\DummySearchWindow.cs 891 34 VToolNG

ausserdem frage ich mich, wie ich das tooltip zeichnen soll...
ich hab mal das toolTip1_Draw-Event

 void toolTip1_Draw(object sender, DrawToolTipEventArgs dea)
        {
            int x = 0, y=0;
            if (x == 0)
            {
                x = MousePosition.X;
                y = MousePosition.Y;
            }
           Graphics g = dea.Graphics;
           g.DrawImage(image,new Point(MousePosition.X,MousePosition.Y));
        }

leider wird mir nur ein schwarzes kästchen angezeigt....
habe ich was falsch gemacht?

15.10.2008 - 16:42 Uhr

die suche habe ich schon genutzt....
gibt es keine einfache möglichkeit?
so in der art wie ich es probiert habe?

15.10.2008 - 16:16 Uhr

hmm.. das ist eine gute idee 🙂

danke.. ich glaube so mach ich es..

15.10.2008 - 16:00 Uhr

Wie kann man runde Buttons selber erstellen?
hab ne klasse erstellt, die von Button erbt und wollte "onpaint" einfach mal als test nen circle malen... das geht aber nicht...
beim aufruf wurde einfach ein schwarzes viereckiges kästchen angezeigt...

gibt es eine einfache möglichkeit das umzusetzen?

15.10.2008 - 15:57 Uhr

kann man nicht einfach debug auf release umstellen? oder unter erstellen ... veröffentlichen...
glaube dann wird eine "installationsdatei" erstellt..

15.10.2008 - 14:36 Uhr

hmm... ich frag mal anders... ist es möglich eine form über tooltip laufen zu lassen oder ähnliches?

15.10.2008 - 12:16 Uhr

da lasse ich mein ssis arbeiten...
ich lass jeden morgen alles löschen und neu reinschreiben...
sehr zeitaufwändig ists ja nicht...

15.10.2008 - 12:07 Uhr

zum abfragen der baumstruktur braucht man nichtmal ein dataset...

man kann direkt über

XmlReader xr = cmd.ExecuteXmlReader();

darauf zugreifen...
so habe ich bis jetzt alle meine baumstrukturen gelöst....

15.10.2008 - 11:49 Uhr

wäre es nicht besser eine xml struktur in ne xml spalte abzulegen?

15.10.2008 - 10:39 Uhr

hi...
ich weiß, der name ist nicht wirklich gut gewählt, aber ich weiß nicht wie ich es ausdrücken soll...

ich habe eine tabelle mit vielen daten...
ich möchte nun, wenn ich mit der maus über eine bestimmte zelle gehe, das ein Fenster in Kleinansicht aufgepoppt wird, mit details der daten...
wenn die maus nicht mehr auf der zelle ist, soll das Fenster wieder zugehen.

Wie kann man das am besten realisieren? Es soll natürlich auch performant sein..

13.10.2008 - 19:48 Uhr

ob die züge gemacht werden dürfen oder nicht wird an anderer stelle ermittelt...
dafür ist die methode "zeugeMöglich", in der alle noch möglichen züge in ein array geschrieben werden...

ich versuch das mal mit der csv datei... vllt hilfts..
danke für die vorschläge

10.10.2008 - 16:41 Uhr

[sing]
wo sind all die schönen foren hin?
wann verlor das große ziel den sinn?
[/sing]

10.10.2008 - 14:31 Uhr

das problem ist ja, es gibt kein fehler....
bzw ich finde keinen... das programm läuft super....
aber die züge sind unsinnig ?!
kann mir vllt jemand weiterhelfen der sowas schonmal gemacht hat?

10.10.2008 - 13:50 Uhr

so.. hier sind mal meine miniMax methoden...
irgendwie funktionierts aber nicht...
hab ich irgendwas falsch gemacht?

       
//züge für X
//b => zweidimensionales array (Spielfeld)
public int minmaxX(int[,] b)
        {
            // Blatt erreicht
            if (spielFeld.besetzteFelder(b) == 9)
            // Bei Sieg für X return 1, Sieg für O return -1, gleichstand = 0
                return spielFeld.siegErmitteln(b);

            int max = -5;
            // alle freien feldkoordinaten herausfinden
            int[] zuege = spielFeld.zuegeMöglich(b);

            for (int i = 0; i < zuege.Length; i++)
            {
                // führe X-Zug aus
                // zuege[i] liegt vor als zb. 22 => x = 2, y=2;
                b[zuege[i] / 10,zuege[i] % 10] = 1;

                int wert = minmaxO(b);
                if (wert > max)
                {
                    max = wert;
                    koordinatenx = zuege[i];
                }

                // nimm Zug zurück
                b[zuege[i] / 10,zuege[i] % 10] = 0;
            }

            return max;
        }

//Züge für O
        public int minmaxO(int[,] b)
        {
            // Blatt erreicht
            if (spielFeld.besetzteFelder(b) == 9)
                return spielFeld.siegErmitteln(b);

            int min = +5;
            int[] zuege = spielFeld.zuegeMöglich(b);

            for (int i = 0; i < zuege.Length; i++)
            {
                // führe X-Zug aus
                b[zuege[i] / 10,zuege[i] % 10] = -1;

                int wert = minmaxX(b);
                if (wert < min)
                {
                    min = wert;
                    koordinaten0 = zuege[i];
                }

                // nimm Zug zurück
                b[zuege[i] / 10,zuege[i] % 10] = 0;
            }

            return min;
        }

es werden züge ausgeführt... aber die sind alles andere als sinnvoll....
der einzige unteschied zu meinem pseudo-zufalls gesetze ist, dass immer gleich gesetzt wird.. und wenn ich ins setzschema eingreife reagiert der minimax algo immer gleich... aber nicht gut! eher das gegenteil... wenn ich 2 in einer reihe hab, setzt minimax den stein an irgendeine unsinnige stelle...
liegt der fehler hier am gezeigten code?

09.10.2008 - 16:35 Uhr

Edit: war doch nicht so

09.10.2008 - 15:03 Uhr

hmm.. das spielbrett habe ich durch ein 2dimensionales int array gelöst...

Spieler 1 setzt Felder = 1 und Spieler 2 setzt Felder = 2, wenns leer ist ist Feld = 0;
darüber funktioniert im moment auch das rausfinden wer gewonnen hat...
das möchte ich erstmal nicht ändern...

hmm..
aber ich könnte tipps zum Aufbau des Spiels brauchen....

Vielleicht könnt ihr mir sagen was ich besser machen könnte von der Struktur her.

Habe eine Klasse Spielfeld:
Züge werden hier gemacht und 3x3 Spielsteine werden auf die Form geladen

Eine Klasse Spielstein:
Ein einzelnes Feld das entweder leer, mit Kreuz oder mit Kreis drin gezeichnet wird.

Eine Klasse Ki:
Hier sollen die Züge mal berechnet werden, momentan noch zufall;

Eine Klasse Einstellungen:
Momentan nur die Schwierigkeitsstufe "Leicht" einstellbar.

Ist das so in Ordnung oder habe ich was total falsch gemacht?

09.10.2008 - 12:12 Uhr

auf der seite war ich schon...
nur das hilft mir nicht wirklich weiter....
wie bewerte ich zb einen zug?
wie baue ich den suchbaum auf?

das wird dort nciht erklärt...
kann mir jemand weiterhelfen?

ps: das mit dem fertigen beispiel sollte nicht passend auf meins zugeschnitten sein..
einfach ein programm mit so einer art suche, damit ich ein besseres verständnis dafür entwickeln kann..

09.10.2008 - 11:12 Uhr

hi...
ich programmiere ja noch nicht so lange...
mittlerweile sinds knapp 3 monate...
jetzt wollte ich mich an mein erstes Spiel begeben.

Hab mich für ein einfaches entschieden.
Tic Tac Toe...

für jeden ders nicht kennt, sieht ungefähr so aus:

x|o|x

o|x|

x|o|

spieler gegen spieler funktioniert soweit.
was mir jetzt fehlt wäre eine KI.
Nach kleiner recherche habe ich mich für die alpha-beta suche entschieden.
Nur leider weiß ich nicht wie ich das gelesene umsetzen soll...

kann mir vllt jemand eine fertige alpha-beta suche zeigen, damit ich es verstehe?
oder erklären wie man zb. die Bewertung umsetzen soll usw.

danke im voraus 🙂

08.10.2008 - 14:27 Uhr

ok.. danke 🙂

08.10.2008 - 14:20 Uhr

hi...
wie kann man verhindern das die Form auf die desktopgröße maximiert werden kann?

am besten wäre es, wenn man den maximieren button grau hinterlegen könnte oder ähnliches, das dieser nicht gedrückt werden kann.
wie geht das?

07.10.2008 - 12:32 Uhr

ok.. dankeschön.. mit backroundworker funktionierts perfekt 🙂

07.10.2008 - 11:24 Uhr

hi...
ich habe ein programm das mir daten aus einer sql-datenbank in einer datagridview anzeigt...
die querys brauchen manchmal bis zu 30 sekunden, weshalb ich die abfrage in einem anderen thread ausgelagert habe...
wärend der abfrage soll jedoch ein ladebenachrichtigung laufen...
bisher habe ich das mit

while(thread.IsAlive)

gemacht...
das ist aber unschön, weil ja in diesem fall meine gui wieder blockiert...
gibt es vllt sowas wie ein "threadIsrFinished-Event"? oder allgemein ein Event?
wenn ja.. wie wendet man es an?

26.09.2008 - 15:19 Uhr

🤔 🤔

ich glaube ich sollte für heute aufhören...
hab das event auf die Form namens DGV gelegt, anstatt auf das datagridview datagridview1 -.-

26.09.2008 - 14:54 Uhr

ich habs jetzt mal so versucht, hat aber nicht funktioniert...
das event wird garnicht aktiviert, nur das menü geht auf.. wie vorher auch...

private void dgv_MouseDown(object sender,MouseEventArgs e)
{  if (e.Button != MouseButtons.Right) return;
  DataGridView.HitTestInfo hti = dgv.HitTest(e.X,e.Y);
  if (hti.Type == DataGridViewHitTestType.Cell)
  { dgv.CurrentCell = dgv[hti.ColumnIndex, hti.RowIndex];
    dgv.CurrentCell.Selected = true;
  }
}
26.09.2008 - 14:37 Uhr

wie der topic schon sagt...
wie macht man das?
ich habe eine dgv mit contextmenustrip..
wenn ich nun mit rechtsklick auf eine zeile klicke soll diese markiert werden und dann das contextmenu aufgehen....
ich finde es ein bisschen umständlich eine zeile erst zu markieren und dann das mit rechtsklick zu bestätigen..

26.09.2008 - 14:34 Uhr

wieso benutzt du überhaupt ein array?
man kann doch direkt aus dem dataset die werte in die kombobox schreiben...

26.09.2008 - 14:15 Uhr

verstehe nur ich deine fragestellung nicht oder macht das da keinen sinn?

26.09.2008 - 10:43 Uhr

Event lautet:

this.orderView.Click += new System.EventHandler(this.orderView_Click);  

Ich nehme an Dein e bezieht sich auf den Event-Handler von overview_Click:

public void orderView_Click(object sender, EventArgs e)  
        {  
            MessageBox.Show(overView.SelectedNode.Text);  
        }  
  

Ich habe aber keine Möglichkeit e.Node.Text.ToString() zu nutzen, jedenfalls ist IntelliSense nicht so nett: es wird mir nicht angeboten.

overView.Nodes.Cout.ToString() liefer mit die richtige Anzahl der Nodes zurück.

this.orderView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.orderView_NodeMouseDoubleClick);

versuchs mal damit..
du wolltest doch eh doppelklick.. hast du doch oben geschrieben

EDIT: Ausserdem hast du nen rechtschreibfehler in

MessageBox.Show(overView.SelectedNode.Text);

Vielleicht liegts ja nur daran?
müsste doch orderView heißen?!

26.09.2008 - 10:25 Uhr

wenn das event doch auf klick von deinem treeView reagiert reicht einfach

e.Node.Text.ToString()
26.09.2008 - 10:06 Uhr
TreeNode node = treeView1.Nodes.Add("Root");

Edit: ups... zu lange das fenster auf 😁

25.09.2008 - 15:22 Uhr

aha...
habs rausgefunden...

einfach in der dgv die eigenschaft contextmenustrip benutzen 🙂

25.09.2008 - 15:00 Uhr

hi..
ich möchte auf meine datagridview so ein drop down anlegen...
das heißt, wenn irgendwo ein rechtsklick getätigt wird, soll es angezeigt werden...

nur wie heißt du komponente?
ist das ein ContextMenuStrip?

hab das mal testhalber auf meine form gezogen, es passiert aber nix...

oder ist es was ganz anderes?

23.09.2008 - 11:34 Uhr

naja...
das this.close() nicht funktioniert ist logisch...
ich möchte ja auch keine erklärung dafür, deswegen habe ich die fehlermeldung nicht gepostet....

aber hab das ganze jetzt umgangen...
da ich die forms nicht notwendig brauche, habe ich alles in ne consolenanwendung geschrieben...
auch wenn mir forms lieber gewesen wären...

-.-
danke trotzdem

23.09.2008 - 11:07 Uhr

hmm..
wie kann ich das programm denn sonst schließen?

Informs all message pumps that they must terminate, and then closes all application windows after the messages have been processed.

das heißt für mich aber das die anwendung geschlossen wird o.O

this.close();

kann ich auch nicht benutzen, weil dann fehler auftreten...

bis jetzt hat es eigentlich immer mit

Application.Exit();

funktioniert

23.09.2008 - 10:52 Uhr

hi..
ich lasse mein programm laufen und möchte es dann schließen mit

System.Windows.Forms.Application.Exit();

habe das in anderen programmen auch so gemacht...
im debugmodus habe ich das mal verfolgt...

das programm springt auf die zeile,
springt weiter, aber beendet das programm nciht...
sodass am ende noch eine leere Form zu sehen ist und das programm auf

Application.Run(new Form1());

hängen bleibt..

hab ich irgendwas falsch gemacht?

23.09.2008 - 08:09 Uhr

ok.. ja.. hat alles super funktioniert 🙂
danke für eure hilfe 🙂

23.09.2008 - 08:01 Uhr

würde es auch reichen wenn ich mit

cmd.ExecuteXmlReader;

die XML-Spalte aus der tabelle abfrage?

22.09.2008 - 16:59 Uhr

das hat doch grade nix mit sql grundlagen zu tun...
ich möchte doch nur wissen wie man aus dem c# code auf die xml in der datenbank zugreifen kann.. am besten über den xml-reader 🙂

es würde mir ja reichen wenn ich stichwörter bekommen würde...
ich kann mir nicht so viele bücher kaufen, da ich es als hobby betreibe und nicht so viel geld zur verfügung habe...

22.09.2008 - 16:36 Uhr

danke.. der link hat mir sehr weitergeholfen...
ich weiß jetzt wie man xml-dateien in der sql datenbank speichern kann...
aber ich habe noch ein problem...

habe bisher die xml datei so ausgelesen und dargestellt....


            TreeNode tn = null;
            XmlReaderSettings myset = new XmlReaderSettings();
            myset.IgnoreWhitespace = true;
            XmlReader xr = XmlReader.Create("My.xml", myset);
            while (xr.Read())
            {
                if (xr.NodeType == XmlNodeType.EndElement)
                {
                    tn = tn.Parent;
                }
                else
                {
                    if (xr.NodeType == XmlNodeType.Element)
                    {
                        if (tn == null)
                            tn = treeView1.Nodes.Add(xr.GetAttribute(0).ToString());
                        else
                            tn = tn.Nodes.Add(xr.GetAttribute(0).ToString());
                        if (xr.IsEmptyElement == true)
                            tn = tn.Parent;
                    }
                    if (xr.NodeType == XmlNodeType.Text)
                    {
                        tn.Text = tn.Text + " | " + xr.GetAttribute(1).ToString();
                    }
                }
            }
            xr.Close();

im prinzip kann ich es ja immernoch so nutzen.. weil die datei 1zu1 auf dem server liegt...
nur wie kann ich die tabelle im xml format abfragen?
also anstatt eine datei aufrufen:

 XmlReader xr = XmlReader.Create("My.xml", myset);

eine sql query aufrufen... wie muss es da aussehen?

22.09.2008 - 15:45 Uhr

verwendetes Datenbanksystem: <MSSQL 05>

hi...
kann mir vllt jemand sagen, wie man xml dateien in eine sql tabelle schreibt und abruft?

11.09.2008 - 14:36 Uhr

ich hab ein einfaches programm das ein bild fast druchsichtig auf ein anderes bild zeichnet...
da ist nix mit algorithmus der was erkennt^^
einfach bild rein und drübergemalt^^

aber so soll es ja nicht sein... ich will ja nur 1 mal draufmalen .. nicht 10 mal...

wenn dir jemand was gutes vorschlägt, dann setzt du es nicht um weil es nciht von dir ist? merkwürdige einstellung.

nicht irgendjemand hats mir vorgeschlagen...
wenn ich das jetzt verwende dann zieht der mich damit auf das ich seine ideen klaue oder so...
ich kenn den ja gut^^

11.09.2008 - 13:25 Uhr

aus protest 😁
das war ein vorschlag von nem kumpel^^
aber ich will ohne seine lösung weiterkommen 🙂