2016-08-02 3 views
0

Ich habe eine Usercontrol, die TimerC# von Form variabler Wert, wenn der Wert mit Timer in Usercontrol geändert

public partial class Cumle : UserControl 
{ 
    private bool cond=false; 

    //Some Code.... 

    private void timer2_Tick(object sender, EventArgs e) 
    { 
     //Some Code.... 
     if(//some condition...) 
      cond=true; 
    } 
} 

habe ich auf Windows arbeite form.I wollen ein Meldungsfeld angezeigt werden, die mir zeigt, dass Cond true.Ich möchte dieses Zeug machen, ohne Timer auf Form zu verwenden.

public partial class Form1 : Form 
{ 
     //What I must write here? 
} 
+0

Kannst du nicht gerade die Benutzersteuerung das Meldungsfeld zeigen lassen? – MasterXD

+0

Fügen Sie ein Ereignis zu Ihrem 'UserControl' hinzu. Abonnieren Sie das Ereignis von 'Form1'. Feuern Sie das Ereignis ab, wenn "cond" auf "true" gesetzt ist. – Baldrick

+0

'Cumle' kann ein Ereignis liefern, wenn Wert geändert wird, zu dem Sie in' Form1' subskribieren. – Sinatr

Antwort

0

Sie müssen Ihrem Benutzersteuerelement ein öffentliches Ereignis hinzufügen und es von Ihrem Hauptformular aus abonnieren.

So etwas sollte es tun:

public partial class Cumle : UserControl 
{ 
    public event Action<bool> ConditionChanged = delegate {}; 

    private bool cond=false; 

    //Some Code.... 

    private void timer2_Tick(object sender, EventArgs e) 
    { 
     //Some Code.... 
     if(//some condition...) 
     { 
      cond=true; 
      ConditionChanged(cond); 
     } 
    } 
} 

Dann in Ihrer Form:

public partial class Form1 : Form 
{ 
    void SubscribeToConditionChanged() 
    { 
     myUserControl.ConditionChanged += ShowDlg; 
    } 

    void ShowDlg(bool condition) 
    { 
     MessageBox.Show("...."); 
    } 
} 
+0

Muß ich einen Code in Delegaten schreiben {} .Because diesen Code nicht geputtet Haltepunkt an SubscribeToConditionChanged Methode in dem Formular worked.I aber nicht ausgeführt – dviddddd

+0

Sie müssen 'SubscribeToConditionChanged' nach der Konstruktion des Formulars aufrufen - ich würde vorschlagen, den Aufruf nach' InitializeComponent' im Konstruktor des Formulars hinzuzufügen. – Baldrick

1

Wie bereits erwähnt, sollten Sie Events verwenden. Ich würde so gehen:

public partial class Cumle : UserControl 
{ 
    public event EventHandler ConditionChangedToTrue; 

    protected virtual void OnConditionChangedToTrue(EventArgs e) 
    { 
     if (ConditionChangedToTrue != null) 
      ConditionChangedToTrue(this, e != null ? e : EventArgs.Empty); 
    } 

    private void timer2_Tick(object sender, EventArgs e) 
    { 
     //Some Code.... 
     if (true) // add your condition 
     { 
      cond = true; 
      OnConditionChangedToTrue(null); 
     } 
    } 
} 

public partial class Form1 : Form 
{ 
    private Cumle cumle = new Cumle(); 

    public Form1() 
    { 
     InitializeComponent(); 
     cumle.ConditionChangedToTrue+= Cumle_ConditionChangedToTrue; 
    } 

    private void Cumle_ConditionChangedToTrue(object sender, EventArgs e) 
    { 
     // add your event handling code here 
     throw new NotImplementedException(); 
    } 
} 
Verwandte Themen