Laden...

Forenbeiträge von bz7i Ingesamt 12 Beiträge

09.11.2011 - 12:18 Uhr

Moin,

Ich habe eine NotifyIcon Anwendung, mit Klick auf das Icon öffnet sich ein ContextMenüStrip. In dem ContextMenüStrip fange ich das .Close() Event ab. Ich möchte nicht, das sich das CM schließt wenn ich auf ein ToolStrip klicke.

hier der Code dazu:

        private void myClosingHandler(object sender, ToolStripDropDownClosingEventArgs e)
        {
            //MessageBox.Show(e.CloseReason.ToString());
            if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)  e.Cancel = true;
            
        }

Funktioniert in der Therorie, in der Praxis verliert das CM unter bestimmten umständen den Focus und schließt.

Jetzt weiß ich nicht warum das CM den Focus verliert...

Jemand ein Tipp wie ich dem auf die Spur komme ? Meine Idee ist es erstmal abzufragen, weches Objekt denn den Focus hat. Ist das möglich ??

Weil ich auch mit .Visible false/true im CM arbeite, glaub ich, das es daher irgendwie stammt. Aber seh da kein Muster, da es ja an 90% der ToolStrips funktioniert 😕

mfg Basti...

06.11.2011 - 08:38 Uhr

Hi herbivore,

von der Idee super, danke.
Aber das ganze ist eher eine Notifyicon Anwendung. Habe zu dem Zeitpunkt kein wirkliches Form offen 😕

05.11.2011 - 10:43 Uhr

Soooo, also nochmal herzlichen dank, klappt schonmal viel besser 😃

Jetzt habe ich aber das problem, das wenn ich auf den Bildschirm klicke, das ContextMenü nicht schießt 😕

Der ClickEventHandler eines "Ordners" ist ein anderer wie eines Members in einem "Ordner".
Also war es leicht, wenn ich einen Member anklicke, schließen ist das ContextMenü einfach mit .close(). Aber wie mache ich es, wenn ich jetzt auf einen Punkt irgendwo auf dem Bildschirm click ( außerhalb vom Contextmenü und Formular ) ??

05.11.2011 - 10:24 Uhr

Danke schön 😃

werde es gleich ma testen 😉

05.11.2011 - 09:10 Uhr

Moin,

Hab ein ContextMenü erstellt. Dieses soll wie im WindowsExplorer eine Ordnerfunktion haben. Also wenn ich auf ein ToolStrip klicke, das mir dann die darin liegenden ToolStrip's dadrunter angezeigt werden. Funktioniert super bis auf das nach einem klick auf einen "Ordner" das Contextmenü sofort schließt und Ich erst erneut das ContextMenü öffnen muß.

Programmiere noch nicht so lange C#, ist er möglich für einzelne ToolStrips bzw für das ganze Contextmenü, den Click-Event-Handler "Schließen nach Click" zu löschen oder zu bearbeiten ???

mfg Sebastian

16.10.2011 - 19:52 Uhr

Moin,

bräuchte da mal einen denkanstoß.

Hab ein treeView welches ich mit Daten aus einer SQL-Datenbank fülle.
Wenn ich auf das treeNode klicke, werden mir weiter Daten aus der SQL-Datenbank angezeigt.

Um die dataRow aus der Datenbank zu selectieren, vergleiche ich den treeNode.text mit einer Zeile ( Name ) aus der Datenbank !!!

Jetzt kommt es vor, das der Name doppelt vorhanden ist.
Wenn ich jetzt eines von den beiden anklicke, werden mir natürlich immer die Daten von dem ersten dataRow mit dem Namen ausgegeben.

Wie würdet ihr da vorgehen um die richtige DataRow auszuwählen ??

Hatte überlegt ob ich mir ein eigenes treeNode mache, welches eine Eigenschaft mehr hat, z.B. .dataRowID.
Aber geht das nicht einfacher ? So fitt bin ich mit Vererben nicht...

Hatte mir auch schon eine Klasse erstellt, aber kann dem MyTreeNode nicht mit einem "normalen" treeNode zuweisen 🤔:::

HIILLFFFEEEEEEEEEEEEeeeeeeeeeeeeeeeee 🙂)))

16.10.2011 - 19:29 Uhr

Wollte mich nochmal entschuldigen 🙂

Hab jetzt verstanden was ihr mir sagen wolltet.
In dem zu bearbeiteten DT die dataRows nicht ganz löschen, sondern nur mit .Delete() als gelöscht markieren.
Anschließend macht das .Update() den rest 😉

Hat bissl gedauert, aber hab's geschnallt 👍

14.10.2011 - 20:24 Uhr

Sooooo, also ich komm da immer noch nicht hinter.

Mir ist schon klar wie ich einzelne Datarows lösche.
Aber wenn ich ein bearbeitete Tabelle habe und ich will das nur die Zeilen in der Sql Tabelle gelöscht werden, die ich in der bearbeiteten gelöscht habe. Muß ich ja doch Zeile für Teile durchgehen.
Wie soll ich sonst wissen welche Zeile gelöscht werden soll 😃

Oder ich lösche vorab den ganzen inhalt und füll sie wieder mit der bearbeiteten tabelle 😃

14.10.2011 - 17:24 Uhr

Hmmm... Bin jetzt noch auf der Arbeit.
Werde nachher aber mal bissl testen.

Danke nochmal für die Tipp's... 😉

14.10.2011 - 16:20 Uhr

Ja aber in der bearbeiteten tabelle sind einige datarows doch schon bereits gelöscht.
Und dieses löschen übernimmt er nicht in der SQL Tabelle.

Also wenn ich das richtig sehe, muß ich mit hilfe einer schleife, jedes einzelne datarow vergleich, ob es noch in der EditTable existiert. Wenn nicht dann in der SQL Tabelle löschen.

Also ich finde das umständlich 😉

14.10.2011 - 12:06 Uhr

@ FZelle

Remove ? Du meinst Update ?

Klar benutze ich Update, will doch auch neue Datensätze bearbeitet und hinzugefügt haben.
Oder meinst du ich muß nach dem Update command nochmal mit einem delete command drüber gehen.
Sprich: die Tabellen untereinander vergleichen und die gelöschten Datensätze im bearbeiteten datatable, manuell in der SQL Datenbank löschen ?

Oh man, wie umständlich wäre denn das ? Ist es nicht möglich einfach zu sagen, **SQL datatable = bearbeitetes datatable **???

14.10.2011 - 10:39 Uhr

Moin,
stehe vor folgendem Problem und komme nicht weiter.

Ich habe eine SQL Datenbank aus der ich eine Tabelle lese.

Die Tabelle wird kopiert und in einem treeView dargestellt.
Dort können Datensätze ( Datarow's ) hinzugefügt, bearbeitet und gelöscht werden.
Das haut alles wunderbar hin.

Jetzt möchte Ich aber die bearbeitete Tabelle ( dataTable ) mit der auf der SQL Datenbank synconisieren.
Dafür benutze ich ein DataAdapter mit dem UpdateCommand und hab festgestellt:

DatenSätze hinzufügen -> Funktioniert
DatenSätze bearbeiten -> Funktioniert

DatenSätze löschen -> Funktioniert NICHT !!!

Hab es mehrfach getestet. In der bearbeiteten Tabelle existieren die DatenSätze nicht mehr.
Ich hab das gefühl, das das UpdateCommand nur DatenSätze bearbeiten bzw hinzufügen kann.

Hier der Code:

        public DataTable Favoriten
        {
            get
            {   ...  }

            set
            {
                string TabellenName = "Favoriten";

                SqlCeConnection Connecten = new SqlCeConnection(ConnectionString);
                string SQLBefehl = "SELECT * FROM " + TabellenName + " ORDER BY[FavoritenNr]";

                SqlCeDataAdapter DataAdapter = new SqlCeDataAdapter(SQLBefehl, Connecten);

                DataAdapter.UpdateCommand = new SqlCeCommandBuilder(DataAdapter).GetUpdateCommand();

                DataAdapter.Update(value);

                Connecten.Close();
            }
        }

Hat da jemand einen Tipp für mich ??

Danke jetzt schonmal im vorraus für die Mühe 😉

bz7i...