Selektierte Page aus anderem Thread suchen

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

hier noch mal eine Herausforderung.

Aus einem weiterem Thread (Backgroundworker) heraus möchte ich aus der Dialogklasse
auf ein Steuerelement zugreifen. Und zwar geht es um die aktuelle Page eines TabControls.

Folgender Code gibt mit immer 0 zurück, obwohl ich an der Stelle an der ich die .SelectedIndex auslese (am Breakpoint) eine 8 auslese.
Es wird auf den ReturnValue "iRet" der Wert 8 geschrieben und wenn ich zurück am Aufruf bin ist der Rückgabewert wieder 0.

C#:
private int GetSelectedTabPage(TabControl tabStat)
{
    int iRet = 0;

    if (tabStat.InvokeRequired)
    {
        MethodInvoker del = delegate { GetSelectedTabPage(tabStat); };
        tabStat.Invoke(del);
    }
    else
    {
        iRet = tabStation.SelectedIndex;
    }

    return iRet;
}

Vielleicht mach ich noch was falsch.

Grüße von CopWorker
 

Spyke

Premium-User
du wertest beim ivoke den rückgabewert nicht aus,

so könnte es funktionieren (ungetestet)
C#:
private int GetSelectedTabPage(TabControl tabStat)
{
    int iRet = 0;

    if (tabStat.InvokeRequired)
    {
        MethodInvoker del = delegate { iRet = GetSelectedTabPage(tabStat); };
        tabStat.Invoke(del);
    }
    else
    {
        iRet = tabStation.SelectedIndex;
    }

    return iRet;
}
in Zeile 7 wird iRet zugewiesen
 

CopWorker

Erfahrenes Mitglied
Hallo Spyke,

funktioniert, perfekt.

Noch was:
Ich weise einem Control (Label lbAct) einen ErrorProvider zu.
Zu einem späteren Zeitpunkt will ich den Text vom Cotrol ändern
und zudem den zuvor zugeordneten ErrorProvider einfernen (ep?????.SetError(lbAct, "");)
Die Instanz des Errorprovider habe ich mit aber nicht gemerkt.
Kann man aus dem Control "lbAct" den zuvor zugeordneten ErrorProvider ermitteln?

Vielen Dank
CopWorker
 

Spyke

Premium-User
Ich glaube nicht, auch wenn ich mir den Code vom errorProvider im ILSpy anschau.
Glaube das geht eher nicht.
 

CopWorker

Erfahrenes Mitglied
So vermute ich auch.
Der ErrorProvider bedient sich nur an den Koordinaten eines Controls
und agiert ab da eigenständig.
Ich muss mir halt da ErrorProvider Objekt zuvor merken.

Trotzdem vielen Dank.
Gruß CopWorker