2012-07-12 115 views
0

我創建了一個MouseEventHandler的主要形式有:呼叫MouseEventHandler從另一種形式

 public Home() 
     { 
      InitializeComponent(); 

      this.KeyPreview = true; 
      this.MouseMove += new MouseEventHandler(Home_MouseMove); 
     } 

     public static void Home_MouseMove(object sender, MouseEventArgs e) 
     { 
      bomb.Stop(); 
      bomb.Start(); 
     } 

我怎麼能叫MouseEventHandler從另一種形式?

其他好方法?

+0

你可以在觸發鼠標事件處理程序的另一個frm中創建一個事件,爲什麼不在另一個窗體上使用鼠標事件處理程序? – JohnnBlade 2012-07-12 10:46:45

+0

因爲我在主窗體上寫了一個定時器函數。我不想以其他形式重新編寫代碼。 – Alvin 2012-07-12 10:48:49

+1

然後只需在窗口2中創建一個主窗口訂閱的事件 – JohnnBlade 2012-07-12 10:51:43

回答

0

最前一頁,你必須Home_MouseMove事件更改爲非靜態:

public void Home_MouseMove(object sender, MouseEventArgs e) 
    { 
     bomb.Stop(); 
     bomb.Start(); 
    } 

轉到Program.cs的文件,並從該代碼更改:

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new FrmMain()); 
    } 
} 

這個代碼:

static class Program 
{ 
    public static FrmMain MainForm;// add this line 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     MainForm = new FrmMain();// add this line 
     Application.Run(MainForm); 
    } 
} 

現在在form2上,你可以像這樣在主窗體中調用MouseMove:

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // call MouseMove event in main form 
     Program.MainForm.FrmMain_MouseMove(null, null); 
    } 
} 
+0

謝謝,但它不起作用。 – Alvin 2012-07-12 12:54:14

+0

不可能不起作用 – Tori 2012-07-21 10:20:56

0

我已經測試過了。有用。 在主窗體的代碼是:

public partial class FrmMain : Form 
{ 
    public FrmMain() 
    { 
     InitializeComponent(); 
    } 

    public void FrmMain_MouseMove(object sender, MouseEventArgs e) 
    { 
     this.label1.Text = DateTime.Now.ToString(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     new Form1().Show(); 
    } 
} 

Form1代碼是:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Program.MainForm.FrmMain_MouseMove(null, null); 
    } 
} 

它與click事件一個按鈕。當您單擊按鈕在主窗體鼠標移動事件引發

最後的Program.cs代碼

static class Program 
{ 
    public static FrmMain MainForm; 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     MainForm = new FrmMain(); 
     Application.Run(MainForm); 
    } 
} 

我已經測試它和它的話。我可以發送項目,如果你想