winform 在formload事件里面调用mousedown事件

qq_38155668 2017-05-16 03:22:13
private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
MessageBox.Show("1");

}


if (1>0)
{
MessageBox.Show("11111");
}
}

private void Form1_Load(object sender, EventArgs e)
{
button1_MouseDown(this, null);
}


这些是代码为什么在formload的时候还没有执行第二个if就直接弹出程序了。而在在、运行时候右键点击也可以触发第二个事件
...全文
303 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-05-16
  • 打赏
  • 举报
回复
为什么要调用 button1_MouseDown 呢? 你打算在按钮上绘图?就算是,那就直接画就是了 不然 button1_MouseDown 不就和 button1_Click 等价了吗? 如果只是想用程序点一下按钮,那么 button1.PerformClick(); 就可以了
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 14 楼 starfd 的回复:
那你可以看下new MouseEventArgs,他有2个构造函数,然后参数我看了挺蛋疼的
恩第二次发帖。。。我结贴了哈知道原因了谢谢了
  • 打赏
  • 举报
回复
那你可以看下new MouseEventArgs,他有2个构造函数,然后参数我看了挺蛋疼的
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 12 楼 starfd 的回复:
 if (e!=null&& e.Button == MouseButtons.Left)
加个判断就好了
能不能改null,改成一个可以使用的值,感觉if是属于治标不治本的方法。。。
  • 打赏
  • 举报
回复
 if (e!=null&& e.Button == MouseButtons.Left)
加个判断就好了
夏天的枫 2017-05-16
  • 打赏
  • 举报
回复
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
第一跳出去应该是异常了,你要想null.Button该不该报异常 正常是这么调用,但也要看你内部的代码,你明显用到了e.Button,那直接无脑的传null肯定异常
好像我写了try也没有throw出来就只是直接跳出去了。
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
传入的 e 是 null 不可能存在 e.Button,自然就因异常而退出了
那我这个应该怎么改啊传入的e改成什么
xuzuning 2017-05-16
  • 打赏
  • 举报
回复
传入的 e 是 null 不可能存在 e.Button,自然就因异常而退出了
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
第一跳出去应该是异常了,你要想null.Button该不该报异常 正常是这么调用,但也要看你内部的代码,你明显用到了e.Button,那直接无脑的传null肯定异常
可以麻烦把这个改怎么写贴出来不。。。,不懂得怎么改那个调用的方法。
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
第一跳出去应该是异常了,你要想null.Button该不该报异常 正常是这么调用,但也要看你内部的代码,你明显用到了e.Button,那直接无脑的传null肯定异常
好像是理解了,那我应该写(this,MouseEventArgs e)吗?我去试试
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
1>0 用永远成立 不管你点击左键还是右键 都会弹出 "11111"
因为第一个if的时候直接跳出了这个方法所以直接没有走到第二个if,
exception92 2017-05-16
  • 打赏
  • 举报
回复
1>0 用永远成立 不管你点击左键还是右键 都会弹出 "11111"
  • 打赏
  • 举报
回复
第一跳出去应该是异常了,你要想null.Button该不该报异常 正常是这么调用,但也要看你内部的代码,你明显用到了e.Button,那直接无脑的传null肯定异常
qq_38155668 2017-05-16
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
你的e都是null,确认Form1_Load直接加载没报错? 然后你第二个1>0这个永远成立,所以第二个MessageBox必定出来的
调用click事件不是都这样写的吗。。。 (this,null), 你可以把这个复制一下运行下,在formload情况下在第一个if的时候就直接跳出去了,不知为什么,换其他的条件不会跳出去,然后在正常运行时候也可以正常运行到第二个if
  • 打赏
  • 举报
回复
你的e都是null,确认Form1_Load直接加载没报错? 然后你第二个1>0这个永远成立,所以第二个MessageBox必定出来的
自定义窗体的最大化、最小化和关闭按钮, C#移动无标题栏窗体的三种代码: C#移动无标题栏窗体的三种代码:第一种采用,需注意窗体上的控件是否把窗体覆盖了。。。MouseDown、MouseMove、MouseUp事件应该是鼠标所处位置最顶层的控件的事件 在窗体的类中声明两个变量 private Point mouseOffset; //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否按下 创建该窗体 MouseDown、MouseMove、MouseUp事件的相应处理程序 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { int xOffset; int yOffset; if (e.Button == MouseButtons.Left) { xOffset = -e.X ; yOffset = -e.Y ; mouseOffset = new Point(xOffset, yOffset); isMouseDown = true; } } private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if (isMouseDown) { Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); Location = mousePos; } } private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { // 修改鼠标状态isMouseDown的值 // 确保只有鼠标左键按下并移动时,才移动窗体 if (e.Button == MouseButtons.Left) { isMouseDown = false; } } 第二种调用API 未验证 using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; private void Form1_MouseDown(object sender, MouseEventArgs e) { ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); } 第三种未验证 private bool isMouseDown = false; private Point FormLocation; //form的location private Point mouseOffset; //鼠标的按下位置 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); private const int WM_SYSCOMMAND = 0x0112;//点击窗口左上角那个图标时的系统信息 private const int SC_MOVE = 0xF010;//移动信息 private const int HTCAPTION = 0x0002;//表示鼠标在窗口标题栏时的系统信息 private const int WM_NCHITTEST = 0x84;//鼠标在窗体客户区(除了标题栏和边框以外的部分)时发送的消息 private const int HTCLIENT = 0x1;//表示鼠标在窗口客户区的系统消息 private const int SC_MAXIMIZE = 0xF030;//最大化信息 private const int SC_MINIMIZE = 0xF020;//最小化信息 protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_SYSCOMMAND: if (m.WParam == (IntPtr)SC_MAXIMIZE) { m.WParam = (IntPtr)SC_MINIMIZE; } break; case WM_NCHITTEST: //如果鼠标移动或单击 base.WndProc(ref m);//调用基类的窗口过程——WndProc方法处理这个消息 if (m.Result == (IntPtr)HTCLIENT)//如果返回的是HTCLIENT { m.Result = (IntPtr)HTCAPTION;//把它改为HTCAPTION return;//直接返回退出方法 } break; } base.WndProc(ref m);//如果不是鼠标移动或单击消息就调用基类的窗口过程进行处理 } private void Form1_Load(object sender, EventArgs e) { } ------------------------------- 如何在窗体标题栏左边的控制菜单加入自己的菜单啊? 我们一般在窗口标题栏点右键 或 按Alt+空格 可以弹出那个菜单。 ------解决方案-------------------- using System.Runtime.InteropServices; [DllImport( "user32.dll ")] public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport( "user32.dll ")] public static extern bool InsertMenu(IntPtr hMenu, uint uPosition, uint uFlags, uint uIDNewItem, string lpNewItem); public const int MF_BYCOMMAND = 0; public const int MF_STRING = 0; public const int MF_BYPOSITION = 0x400; public const int MF_SEPARATOR = 0x800; private const uint SC_ABOUT = 0x0001; public const int WM_SYSCOMMAND = 0x0112; private void Form1_Load(object sender, EventArgs e) { IntPtr vMenuHandle = GetSystemMenu(Handle, false); InsertMenu(vMenuHandle, 255, MF_STRING, SC_ABOUT, "About... "); } protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_SYSCOMMAND: if ((uint)m.WParam == SC_ABOUT) { MessageBox.Show( "Zswang 路过! "); } break; } base.WndProc(ref m); }

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧