2009-07-08 19 views
0

Ich wurde gebeten, die C# winforms-App zu schreiben, die Benutzern die Möglichkeit gibt, Optionen aus einer Checkbox-Liste auszuwählen und ein Toolstrip automatisch mit den ausgewählten Elementen neu zeichnen/neu streichen zu lassen.Redraw-Toolstrip basierend auf Auswahlen

Ich bin neu bei winforms, also bin ich mir nicht sicher, wie ich es angehen soll. Sollte ich den BackgroundWorker-Prozess verwenden? Invalidieren()?

Nur ein bisschen verwirrt.

Jede Unterstützung der Ausrichtung in die richtige Richtung wäre wünschenswert.

Antwort

1

Wahrscheinlich möchten Sie keinen BackgroundWorker, da dieser auf einem Nicht-UI-Thread ausgeführt wird und beim Versuch, den Toolstrip zu ändern, Probleme verursacht (Sie können nur mit der Benutzeroberfläche des Threads arbeiten, auf dem die UI erstellt wurde). Behandeln Sie die CheckedChanged-Ereignisse in den Kontrollkästchen und fügen Sie dann Elemente aus dem Toolstrip hinzu oder entfernen Sie sie. Das Neuanstrich sollte automatisch sein.

0

Ein Toolstrip enthält Steuerelemente für sich selbst - es kann nicht nur Tasten "malen", die Sie drücken können. Um die Toolstrip-Display verschiedene Tasten haben auf verschiedenen Bedingungen abhängig, können Sie:

  1. Löschen der Toolstrip Artikel und erstellen Sie diejenigen, die im aktuellen Kontext in Code benötigt werden, wenn Elemente in der Liste überprüft werden Sie alle Einzelteile und Design-Zeit (mit Eigentum Visible = false) und stellen genannten
  2. Fügen Sie nur die notwendigen diejenigen Visible = true bei Auswahl in Ihrem Scheck listbox

Keine Notwendigkeit :-) jede Malerei zu tun

1

Sie müssen Tooltips für alle Optionen einige wo halten (wenn Tag Eigenschaft der Checkboxen frei ist, setzen Sie es dort). Wenn eine Option aktiviert oder deaktiviert ist, müssen Sie Tooltips aktualisieren.

Angenommen, Sie fügen alle Kontrollkästchen in einer IList hinzu. wie folgt, dann werden die Dinge funktionieren:

private IList<CheckBox> options= new List<CheckBox>(); 

    private void UpdateTTip() 
    { 
     toolTip1.RemoveAll(); 
     foreach (CheckBox c in options) 
     { 
      if (c.Checked) 
       toolTip1.SetToolTip(c, c.Tag.ToString()); 
     } 
    } 

Nun müssen Sie diese anrufen CheckedChanged Veranstaltung von Optionen Kontrollkästchen:

private void chk_CheckedChanged(object sender, EventArgs e) 
    { 
      UpdateTTip(); 
    } 
Verwandte Themen