C# 调用鼠标事件和向消息框提供输入时出现问题!
我的问题似乎有点长,但我知道解决办法是对我的代码稍加修改 图1\u鼠标向下, pictureBox1\u鼠标移动, 图1\u油漆, 图1\u鼠标 代码应该是这样工作的:当我单击鼠标并拖动它并在所需点释放按钮时,应该会出现一个接受输入值的自定义消息框。这是我的表格1的代码,你可以在看到代码后理解问题 表格1:C# 调用鼠标事件和向消息框提供输入时出现问题!,c#,mouseevent,messagebox,paint,C#,Mouseevent,Messagebox,Paint,我的问题似乎有点长,但我知道解决办法是对我的代码稍加修改 图1\u鼠标向下, pictureBox1\u鼠标移动, 图1\u油漆, 图1\u鼠标 代码应该是这样工作的:当我单击鼠标并拖动它并在所需点释放按钮时,应该会出现一个接受输入值的自定义消息框。这是我的表格1的代码,你可以在看到代码后理解问题 表格1: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { // "e.X"
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
// "e.X" and "e.Y" are used to get MousePositionX and MousePositionY
rect = new Rectangle(0, 0, e.X, e.Y);
pictureBox1.Invalidate();
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
// This makes sure that the left mouse button is pressed.
if (e.Button == MouseButtons.Left)
{
// Draws the rectangle as the mouse moves
rect.Width = e.X;
rect.Height = e.Y;
}
pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using (Pen pen = new Pen(Color.Red, 2))
{
e.Graphics.DrawRectangle(pen, rect);
}
}
private WindowsFormsApplication2.Form2 _form2 = new WindowsFormsApplication2.Form2();
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
DialogResult dialogresult = _form2.ShowDialog(this);
if (dialogresult == DialogResult.OK)
{
try
{
for (int i = 0; i < 2; i++)
{
l[i] = e.X;
m[i] = e.Y;
}
}
catch (Exception ex)
{
}
}
}
private void pictureBox1\u MouseDown(对象发送方,MouseEventArgs e)
{
//“e.X”和“e.Y”用于获取MousePositionX和MousePositionY
rect=新矩形(0,0,e.X,e.Y);
pictureBox1.Invalidate();
}
私有void pictureBox1\u MouseMove(对象发送方,MouseEventArgs e)
{
//这将确保按下鼠标左键。
if(e.Button==MouseButtons.Left)
{
//在鼠标移动时绘制矩形
矩形宽度=e.X;
垂直高度=e.Y;
}
pictureBox1.Invalidate();
}
私有void pictureBox1_Paint(对象发送方,PaintEventArgs e)
{
使用(钢笔=新钢笔(颜色:红色,2))
{
e、 绘图矩形(钢笔、矩形);
}
}
私有WindowsFormsApplication2.Form2 _Form2=新WindowsFormsApplication2.Form2();
私有无效图片box1u MouseUp(对象发送器,MouseEventArgs e)
{
DialogResult DialogResult=_form2.ShowDialog(此);
if(dialogresult==dialogresult.OK)
{
尝试
{
对于(int i=0;i<2;i++)
{
l[i]=e.X;
m[i]=e.Y;
}
}
捕获(例外情况除外)
{
}
}
}
这里的问题是:
1) 根据代码,当我们拖动鼠标时,会出现一个矩形,我们离开鼠标按钮的地方会出现一个消息框,现在这个消息框(form2)无法读取输入值,因为我不知道如何将form2的“确定”和“取消”按钮与form1连接。在输入并按下“确定”后,矩形应该消失,但在这里,它并没有发生
2) 我只需要输入两次,也就是说,我只需要执行前一个动作序列(所有鼠标事件和绘制事件)两次,所以我相应地为循环编写了代码。但问题是消息框(form2)每次都会被触发,我松开鼠标按钮。这导致了一个严重的问题,因为在给出两个输入之后,我必须实现一个mousedoubleclick事件
如果有任何问题,请告诉我必须做的必要更正。
提前谢谢。我不知道你说的“将form2的“确定”和“取消”按钮与form1连接起来”是什么意思 你不必“连接”任何东西。您所需要的只是Form2上的两个按钮(OK和Cancel),在每个单击方法中,您需要
this.DialogResult=DialogResult.OK
表示确定,而this.DialogResult=DialogResult.Cancel代码>用于取消
然后你继续填写表格1中的“如果”
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
DialogResult dialogresult = _form2.ShowDialog(this);
if (dialogresult == DialogResult.OK)
{
rect.Width = 0;
rect.Height = 0;
pictureBox1.Invalidate();
}
}
这将删除矩形。我不知道这是否是一个好的解决方案,但它是有效的
方法中的循环无法按您希望的方式工作:每次调用pictureBox1\u MouseUp
并到达for循环时,“i”将设置为“0”,然后循环开始。
在Form1的构造函数中需要一个intTwoClicks=0
。您必须相应地更改pictureBox1\u MouseUp
:
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (TwoClicks < 2)
{
TwoClicks++;
DialogResult dialogresult = _form2.ShowDialog(this);
if (dialogresult == DialogResult.OK)
{
rect.Width = 0;
rect.Height = 0;
pictureBox1.Invalidate();
}
}
}
private void pictureBox1\u MouseUp(对象发送器,MouseEventArgs e)
{
如果(两次单击<2)
{
双击++;
DialogResult DialogResult=_form2.ShowDialog(此);
if(dialogresult==dialogresult.OK)
{
矩形宽度=0;
直线高度=0;
pictureBox1.Invalidate();
}
}
}
请随时提出任何问题(如果我没有理解正确,请描述您的第一个问题)。很难猜到这段代码要做什么。l[]和m[]是什么?为什么要将它们指定到显示对话框之前鼠标的位置?我怀疑您想用rect做些什么。我正在尝试将鼠标指针的坐标输入到l[]和m[]中,但不确定它们的声明是否正确。我必须给出两次输入,因此我的FOR循环运行了两次。因此,这些鼠标指针值将存储在这些数组中,以便我进行进一步的计算!非常感谢你!你以正确的方式抓住了我的意图!!当我按下按钮时,它们应该按照您所说的方式工作,如果可以,它必须接受给定的值,如果取消,它必须再次请求输入,但此时两次单击不应增加。在给出两次输入后,当我双击图片框时,矩形不应出现,但是它还是出现了。@raghu:你必须在mousedown中(也可能在mousemove中)用“if(TwoClicks<2)”来做同样的把戏。这应该行得通。