2016-08-12 30 views
0

我用面板和兩個標籤的組合進行了用戶控制。我在用戶控件上添加了mouseenter和mouseleave事件。我將用戶控件放在窗體上。我想在點擊控件時打開一個新窗體。但默認點擊或鼠標點擊事件不起作用。我該如何解決這個問題?如何讓用戶控件打開新窗體?

下面是用戶控件代碼:

public partial class group_control : UserControl 
{ 

    public group_control() 
    { 
     InitializeComponent(); 
    } 

    public void setname(string s) 
    { 
     namelbl.Text = s; 
    } 

    public void setno(int n) 
    { 
     no_acc.Text = n.ToString(); 
    } 

    private void logo_MouseEnter(object sender, EventArgs e) 
    { 
     logo.BackColor = System.Drawing.Color.Yellow; 
     no_acc.Visible = true; 
     label1.Visible = true; 
     namelbl.Visible = false; 
    } 

    private void logo_MouseLeave(object sender, EventArgs e) 
    { 
     logo.BackColor = System.Drawing.Color.Gray; 
     no_acc.Visible = false; 
     label1.Visible = false; 
     namelbl.Visible = true; 
    } 

    private void logo_Click(object sender, EventArgs e) 
    { 
     Program.cur_grp = namelbl.Text; 
    } 

    private void no_acc_Click(object sender, EventArgs e) 
    { 
     logo_Click(sender, e); 
    } 

    private void label1_Click(object sender, EventArgs e) 
    { 
     logo_Click(sender, e); 
    } 

    private void namelbl_Click(object sender, EventArgs e) 
    { 
     logo_Click(sender, e); 
    } 

    private void no_acc_MouseEnter(object sender, EventArgs e) 
    { 
     logo_MouseEnter(sender, e); 
    } 

    private void namelbl_MouseEnter(object sender, EventArgs e) 
    { 
     logo_MouseEnter(sender, e); 
    } 

    private void label1_MouseEnter(object sender, EventArgs e) 
    { 
     logo_MouseEnter(sender, e); 
    } 

    private void no_acc_MouseLeave(object sender, EventArgs e) 
    { 
     logo_MouseLeave(sender, e); 
    } 

    private void label1_MouseLeave(object sender, EventArgs e) 
    { 
     logo_MouseLeave(sender, e); 
    } 

    private void namelbl_MouseLeave(object sender, EventArgs e) 
    { 
     logo_MouseLeave(sender, e); 
    } 
} 

這裏是用戶控件Click事件代碼:

private void group_control1_Click_1(object sender, EventArgs e) 
    { 
     new view_record().Show(); 
    } 
+0

修剪的代碼。所有那些MouseLeave事件都需要我們來看待這個問題嗎?把一個調試器停在點擊線上,看看它是否觸發。 – LarsTech

+0

您是否點擊了在您的用戶控件中添加的面板或標籤? –

+0

@ user12572我點擊面板。 –

回答

0

如果您單擊面板,然後面板會得到鼠標點擊事件。如果你想在你的用戶控件上使用該事件,那麼你的面板應該對於鼠標點擊是透明的。這是你如何去做的;

public class ClickTransparentPanel : Panel 
{ 
    protected override void WndProc(ref Message m) 
    { 
     // To make panel "transparent" 
     // to mouse clicks i.e. Mouse clicks pass through this window 
     switch (m.Msg) 
     { 
      case (int) Win32Constants.WM_NCHITTEST: 
       m.Result = new IntPtr((int) Win32Constants.HTTRANSPARENT); 
       return; 
     } 

     base.WndProc(ref m); 
    } 
} 

其中

WM_NCHITTEST = 0x0084, 

HTTRANSPARENT = -1 
+0

我不明白。你能否詳細說明一下?我想在窗體窗體中使用這個控件來打開另一個窗體。 –

+0

如果您將此ClickTransparentPanel作爲面板添加到您的usercontrol中,那麼您的usercontrol將獲得所有的點擊事件。在用戶控件的單擊事件中,可以調用AnotherFormObj.Show()。 –

+0

您已將usercontrol的點擊事件添加爲「group_control1_Click_1」。如果您在usercontrol上使用上述面板而不是使用系統的Panel類,則該事件將按照您的需要工作。 –

相關問題