Permalänk

c# anropa dubbelklick

Har ett litet problem med c#, Jag har gjort så att när man dubbelklickar på datagridview headern så får man några värden från griden som lagras i ett par variabler. nu behöver jag anropa dataGridView_RowHeaderMouseDoubleClick från en banlig knapp. men jag får de inte att fungera. det fungerar bra att anropa en knapp.performclick(), men det vägrar med dubbelclick. har försökt göra en ny eventhandler men utan framgång. vad jag har läst mig till så borde det se ut så här:

dataGridView1_RowHeaderMouseDoubleClick += new DataGridViewRowDividerDoubleClickEventHandler(dataGridView1_RowHeaderMouseDoubleClick);

Error 1 No overload for 'dataGridView1_RowHeaderMouseDoubleClick' matches delegate 'System.Windows.Forms.DataGridViewRowDividerDoubleClickEventHandler

Permalänk
Hedersmedlem

Felet är att funktionen förväntar sig argument. Dessa kan dock vara null; testa

dataGridView_RowHeaderMouseDoubleClick(null, null);

Permalänk
Skrivet av Elgot:

Felet är att funktionen förväntar sig argument. Dessa kan dock vara null; testa

dataGridView_RowHeaderMouseDoubleClick(null, null);

Nu verkar de fungera om man går rad för rad men nu är object sender, DataGridViewCellMouseEventArgs = null så de kraschar iallafall.

Permalänk
Hedersmedlem
Skrivet av hammarhank:

Nu verkar de fungera om man går rad för rad men nu är object sender, DataGridViewCellMouseEventArgs = null så de kraschar iallafall.

Det förutsätter naturligtvis att man inte försöker göra något med dem i funktionen. Var kraschar det?

Permalänk
Skrivet av Elgot:

Det förutsätter naturligtvis att man inte försöker göra något med dem i funktionen. Var kraschar det?

Det kraschar i dubbelklick funktionen eftersom object sender och DataGridViewCellMouseEventArgs e, är null.

Permalänk
Hedersmedlem
Skrivet av hammarhank:

Det kraschar i dubbelklick funktionen eftersom object sender och DataGridViewCellMouseEventArgs e, är null.

Om man behöver objekten kan man bygga upp nya först:

MouseEventArgs a = new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0); DataGridViewCellMouseEventArgs u = new DataGridViewCellMouseEventArgs(0, 0, 0, 0, a); dataGridView1_RowHeaderMouseDoubleClick(null, u);

Permalänk
Skrivet av Elgot:

Om man behöver objekten kan man bygga upp nya först:

MouseEventArgs a = new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0); DataGridViewCellMouseEventArgs u = new DataGridViewCellMouseEventArgs(0, 0, 0, 0, a); dataGridView1_RowHeaderMouseDoubleClick(null, u);

Ja jag förstår, har testat de tidigare men jag ska köra en for loop genom datagriden och i varje itteration ska den dubbelklicka på raden itterationen är på samt lägga till hela raden i ett text dokument.

for (int i = 1; i < dataGridView1.RowCount; i++ )

Permalänk
Medlem
Skrivet av hammarhank:

Har ett litet problem med c#, Jag har gjort så att när man dubbelklickar på datagridview headern så får man några värden från griden som lagras i ett par variabler. nu behöver jag anropa dataGridView_RowHeaderMouseDoubleClick från en banlig knapp. men jag får de inte att fungera. det fungerar bra att anropa en knapp.performclick(), men det vägrar med dubbelclick. har försökt göra en ny eventhandler men utan framgång. vad jag har läst mig till så borde det se ut så här:

dataGridView1_RowHeaderMouseDoubleClick += new DataGridViewRowDividerDoubleClickEventHandler(dataGridView1_RowHeaderMouseDoubleClick);

Error 1 No overload for 'dataGridView1_RowHeaderMouseDoubleClick' matches delegate 'System.Windows.Forms.DataGridViewRowDividerDoubleClickEventHandler

Dubbelklick är ett händelse som en användare gör. Dubbelklicket i sig kan trigga en annan funktion, i ditt fall att hämta värden från gridden samt spara raden i en textfil. Att anropa användargenererade händelser är fel väg att gå. Anropa någon metod längre ner i kedjan.

Vad du bör göra är ett vanligt event till dubbelklick som kallar på en metod som använder en DataGridViewRow som indata.
Sedan kan du anropa denna metoden i koden utan att behöva skicka event hit och dit.

Göra "det du vill göra" för varje rad i datagridviewn:

for(DataGridViewRow row in dataGridView1.Rows)
{
doMagicForRow(row);
}

private void doMagicForRow(DataGridViewRow row) {

// Hämta värden
// Spara något i textfil

}

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Skrivet av Leedow:

Dubbelklick är ett händelse som en användare gör. Dubbelklicket i sig kan trigga en annan funktion, i ditt fall att hämta värden från gridden samt spara raden i en textfil. Att anropa användargenererade händelser är fel väg att gå. Anropa någon metod längre ner i kedjan.

Vad du bör göra är ett vanligt event till dubbelklick som kallar på en metod som använder en DataGridViewRow som indata.
Sedan kan du anropa denna metoden i koden utan att behöva skicka event hit och dit.

Göra "det du vill göra" för varje rad i datagridviewn:

for(DataGridViewRow row in dataGridView1.Rows)
{
doMagicForRow(row);
}

private void doMagicForRow(DataGridViewRow row) {

// Hämta värden
// Spara något i textfil

}

Nu fungerar de nästan, lite skjusteringar kvar. Tack så mycket för all hjälp!