2011-11-30 36 views
0

我正在使用WinForms的第一個C#和.NET項目上工作,因爲WPF對我們的目的來說是過分的。我創建了一個所謂的ButtonMenu,它包含所有菜單點,它們是按鈕。這個類是從Windows類Control派生的。如何通過WinForms中的自制控件創建事件?

ButtonMenu的其中一個按鈕是「文化」按鈕,在此單點觸摸應用程序中按下該按鈕時,應該更改應用程序所具有的所有表單的語言。

最初,ButtonMenu只是一種覆蓋類,它訪問BaseForm和包含方法的控件。 BaseForm將按鈕保存在自己的GroupBox中。後來,我遇到了這種設計方面的問題,並決定單獨進行控制。

我的問題 如何創建一個事件(或類似的東西),可以被BaseForm捕獲,ButtonMenu被放置在哪裏? BaseForm當前不能對此事件做出反應,並且不能更改其所有控件的語言,如文本字段和按鈕。

謝謝你的幫助!

我現在試過的東西如下所示。不幸的是,我無法達到標誌線。

public class BaseForm : Form 
{ 
    […] 
    protected static ButtonMenu m_ButtonMenu = null; 


    protected override void OnResize(EventArgs e) 
    { 
     […] 
     m_ButtonMenu = ButtonMenu.GetInstance(m_CurrentCulture, Size); 

     m_ButtonMenu.Visible = true; 
     […] 
    } 

    public override void UpdateWidgets() 
    { 
     […] 
     try 
     { 
      […] 

      // Translate button menu into current language: 
      m_ButtonMenu.AdaptButtons(m_CurrentCulture); 
     } 
     catch (ArgumentOutOfRangeException aaore) 
     { 
     […] 


     […] 
    } 

    protected void InitializeWidgets() 
    { 
    { 
     string strMethod = Name + ":InitializeWidgets(): "; 

     m_ButtonMenu = ButtonMenu.GetInstance(m_CurrentCulture, Size); 

     SuspendLayout(); 

     Controls.Add(m_ButtonMenu); 
     m_ButtonMenu.Top = Height - m_ButtonMenu.Height; 

     ResumeLayout(); 
     […] 
     m_ButtonMenu.Click += new System.EventHandler(this.ButtonMenu_CultureClick); 
    } 

    private void ButtonMenu_CultureClick(object sender, EventArgs eas) 
    { 
     int iSelection = listViewMessages.SelectedIndices[0]; // <<<<< NEVER REACHED! 

     […] 
    } 
+0

太糟糕了,你不使用WPF。這本來很容易。我只是部分地開玩笑並質疑你對WPF是「過度殺傷」的假設。 – CoderDennis

回答

4

只需在你的班級中定義一個event

無論何時你想讓它開火,都可以打電話給它。

// field 
event EventHandler somethingHappened; 

// in a method: 
var threadSafeCopy = somethingHappened; 
if(threadSafeCopy != null) 
{ 
    threadSafeCopy(this, e); 
} 

eEventArgs實例或EventArgs子類型。

+0

我可以在[link](http://msdn.microsoft.com/en-us/library/w369ty8x.aspx)上通過MSDN教程解決我的問題。我發現,由於以前的考慮,我的事件發佈者類ButtonMenu是一個單例,不再需要了。所以,我將它修改爲一個正常的控制類。我添加了所有在MSDN網站上說的內容,並且它工作正常! – Sae1962

相關問題