Moin,
ich steh gerade etwas auf dem Schlauch und vielleicht hat hier jemand nen Tipp:
Ich habe drei DataGridViews mit unterschiedlichem Inhalt und jeweils eigenem DoubleClick EventHandler, sowie eine Stelle im Form an welcher mir eins der Grids als "sender" Object zugeworfen wird. Das einzige das ich jetzt an dieser Stelle machen möchte ist den besagten DoubleClick auslösen und bekomme das gerade nicht gebacken.
Ich weiß das man das anders machen kann und habe es anders gelöst, ersparen wir uns also bitte die "Warum machst du das überhaupt so?" Routine und bleiben beim Punkt: Wie bekomme ich den Event von außen / vom Form aus getriggert?
Danke
Florian
And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!
Hallo assi
Geht es denn wirklich um das Event oder musst du nur die Methode
(dataGridViewX_Doubleclick(..)) aufrufen?
Ich denke in wirklich komplexeren Situationen ist es auch möglich ein Control von
System.Windows.Forms.DataGridView abzuleiten um dann die entsprechende Methode (z.Bsp: OnDoubleClick) zu überschreiben oder eben aufrufen.
?(Wie sollte denn der Wunsch-Code aussehen ?
Gruss
Balaban_S
Das jedes Grid einen eigenen Eventhandler hat (dataGridView1_Doubleclick(..)) , (dataGridView2_Doubleclick(..)) und (dataGridView3_Doubleclick(..)) ist ja genau die Crux. Ich kann natürlich eine Fallunterscheidung machen udn dann über nen Switch o.ä. die jeweilige dataGridViewX_Doubleclick Fkt manuell aufrufen, aber eigentlich brauche ich das nicht zu tun, da ich, wie gesagt, ja schon das grid objekt in der Hand halte und über seinen Event mit dem richitigen Handler verknüpft ist.
Grober Wunschcode ist
Fkt(object sender, [...])
{
((DataGridView)sender).invoke(OnDoubleClick)
}
And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!
Da Events in C# aber mittels MultiCastDelegates implementiert sind, ist dies nicht eindeutig möglich, denn rein theoretisch könntest du auch alle drei Methoden einem DataGridView-DoubleClick zugewiesen haben.
Und die abonnierten Methoden eines Events kann nur jeweils die Klasse aufrufen, welche das Event implementiert hat.
Also entweder einen switch-case oder aber wie von @Balaban_S schon vorgeschlagen, eine Basisklasse für die DGVs implementieren.
Da Events in C# aber mittels MultiCastDelegates implementiert sind, ist dies nicht eindeutig möglich, denn rein theoretisch könntest du auch alle drei Methoden einem DataGridView-DoubleClick zugewiesen haben.
Ich verstehe nicht was das mit meinem Problem zu tun hat, wenn ich dem DoubleClick einer Instanz eines Grids alle drei Delegates zugewiesen haben sollte, werden beim triggern des Events halt alle drei ausgeführt?!
Und die abonnierten Methoden eines Events kann nur jeweils die Klasse aufrufen, welche das Event implementiert hat.
Das befürchte ich auch, wobei auch das nicht direkt mit meinem Problem zu hat, ich will schließlich nicht auf die abbonierten Methoden zugreifen, sondern nur den Event triggern.
Also entweder einen switch-case oder aber wie von @Balaban_S schon vorgeschlagen, eine Basisklasse für die DGVs implementieren.
Ich kann auch eine Message an das Window schicken damit das den Dbl Click auslöst, aber mein Anliegen war es eine einfache Abkürzung zu finden, was alle drei Lösungen ja nicht direkt bieten 😃
And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!
In welchem UseCase wird benötigt, dass ein Doppelklick-Event vom Code aus so geworfen wird dass es aussieht als hätte der Benutzer selbst doppelgeklickt?
mbg
Rossegger Robert
mehr fragen mehr wissen
Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen
In welchem UseCase wird benötigt, dass ein Doppelklick-Event vom Code aus so geworfen wird dass es aussieht als hätte der Benutzer selbst doppelgeklickt?
Ich weiß das man das anders machen kann und habe es anders gelöst, **ersparen wir uns also bitte die "Warum machst du das überhaupt so?" Routine ** und bleiben beim Punkt: Wie bekomme ich den Event von außen / vom Form aus getriggert?
Danke!
And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!
Hallo assi,
ich kann nachvollziehen, warum du den Wusch hast, aber es sind grundsätzlich immer die Objekte selber und von innen heraus, die die Events auslösen. Deinen Wunschcode gibt es also nicht. Sicher kann man immer versuchen, was hinzubiegen, aber das wird dann schnell noch schlechter, als die vermeintlich schlechte Alternative, die du momentan nutzt.
herbivore
Leute, ich finds ja toll das ihr versucht Einsteigern guten Stil näher zu bringen, darum geht es mir aber nicht. Ich stelle hier die akademische Frage ob es überhaupt möglich ist, bzw. ob jemand ne gute/fundierte Erklärung hat warum das nicht geht.
Edit: Bzw. Freue mich über jeden coolen Workaround
And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!
Hallo assi,
genau darauf läuft doch mein Beitrag hinaus.
herbivore
Hallo,
neben dem von dir erwähnten SendMessage/PostMessage mittels WM_DBLCLICK könntest du selbstverständlich auch Reflection benutzen, um die geschützte OnDoubleClick-Methode aufzurufen:
MethodInfo method = typeof(DataGridView).GetMethod("OnDoubleClick", BindingFlags.Instance | BindingFlags.NonPublic);
if(method != null)
{
EventArgs e = EventArgs.Empty;
method.Invoke(dgv, new object[] { e });
}
@Th69 Cooler Vorschlag, auf die Idee bin ich noch gar nicht gekommen!
Ich spiele damit mal etwas rum, mal sehen wie weit ich komme.
genau darauf läuft doch mein Beitrag hinaus.
Stimmt, sorry ich habe mich von deinem OT Teil zu sehr ablenken lassen. Wobei deine Antwort "Es geht halt nicht" den Thread auch nicht unbedingt weiterbringt 😉
And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!