Problem mit EasyTabs Winforms

  • C#

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von MaLeTut.

    Problem mit EasyTabs Winforms

    Hey, ich bin mal wieder hier!

    Ich habe das Problem, dass wenn ich, zb. den Text vom Tab aus dem Tab heraus ändern möchte, diesen Fehler erhalte:

    Quellcode

    1. System.InvalidOperationException: "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Form1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."


    Ich habe diese Threafehler generell immer schlecht lösen können... (Projekt ist hiernach aufgebaut)

    ParentTabs:

    C#-Quellcode

    1. protected TitleBarTabs ParentTabs
    2. {
    3. get
    4. {
    5. return (ParentForm as TitleBarTabs);
    6. }
    7. }


    Die Funktion um den Namen zu ändern:

    C#-Quellcode

    1. private void Funktion(object sender, AddressChangedEventArgs e)
    2. {
    3. ParentTabs.Text = "Tab Name";
    4. }


    Und die Klasse, die die Tabs erzeugt:

    C#-Quellcode

    1. public partial class AppContainer : TitleBarTabs
    2. {
    3. public AppContainer()
    4. {
    5. InitializeComponent();
    6. AeroPeekEnabled = true;
    7. TabRenderer = new ChromeTabRenderer(this);
    8. }
    9. public override TitleBarTab CreateTab()
    10. {
    11. return new TitleBarTab(this)
    12. {
    13. Content = new Form1
    14. {
    15. Text = "New Tab"
    16. }
    17. };
    18. }
    19. private void AppContainer_Load(object sender, EventArgs e)
    20. {
    21. }
    22. }


    Hoffe ihr könnt mir helfen, cheers. ^^
    @MaLeTut Ändere zunächst mal den Threadtitel nach C#.
    Dann wäre es gut, wenn Du uns die Ziele + Umgebung postest, wo es knallt.
    Wahrscheinlich greifst Du aus einem anderen Thread heraus auf ein GUI-Element zu, das musst Du invoken und feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nur wo und wie darf ich das implementieren? :/
    Also was muss ich anstatt von

    Quellcode

    1. Funktion
    schreiben?

    Edit:

    C#-Quellcode

    1. private void Funktion(object sender, AddressChangedEventArgs e)
    2. {
    3. if (InvokeRequired)
    4. {
    5. Invoke(new Action(() => Funktion(sender, e)));
    6. }
    7. else
    8. {
    9. ParentTabs.Text = "TabName";
    10. }
    11. }

    Nun erhalte ich keinen Fehler mehr, aber auch kein Resultat.. :huh:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MaLeTut“ ()

    @MaLeTut Bei diesem Invoken ruft sich die Prozedur selbst im Thread der GUI noch mal auf.
    Unterschieden werden die beiden Aufrufe durch das if (InvokeRequired).
    Setz mal auf die Zeile

    C#-Quellcode

    1. ParentTabs.Text = "TabName";
    einen Haltepunkt und überzeuge Dich davon, dass der Code abgearbeitet wird, gugst Du hier: Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du hast recht, er wird ausgeführt.. Nur wieso wird der Text vom Tab nicht verändern?

    EDIT:

    C#-Quellcode

    1. ParentTabs.SelectedTab.Content.Text = e.Address

    Man sollte auch die richtige Funktion verwenden... haha ^^

    Vielen Dank für die hilfe ^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MaLeTut“ ()