Laden...

DoubleClick auf DataGridView extern auslösen

Erstellt von assi vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.925 Views
assi Themenstarter:in
114 Beiträge seit 2006
vor 13 Jahren
DoubleClick auf DataGridView extern auslösen

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!

194 Beiträge seit 2006
vor 13 Jahren

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

assi Themenstarter:in
114 Beiträge seit 2006
vor 13 Jahren

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!

4.942 Beiträge seit 2008
vor 13 Jahren

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.

assi Themenstarter:in
114 Beiträge seit 2006
vor 13 Jahren

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!

S
443 Beiträge seit 2008
vor 13 Jahren

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

assi Themenstarter:in
114 Beiträge seit 2006
vor 13 Jahren

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!

49.485 Beiträge seit 2005
vor 13 Jahren

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

assi Themenstarter:in
114 Beiträge seit 2006
vor 13 Jahren

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!

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo assi,

genau darauf läuft doch mein Beitrag hinaus.

herbivore

4.942 Beiträge seit 2008
vor 13 Jahren

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 });
}

assi Themenstarter:in
114 Beiträge seit 2006
vor 13 Jahren

@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!