调用鼠标事件和向消息框提供输入的问题
本文关键字:输入 问题 消息 鼠标 事件 调用 | 更新日期: 2023-09-27 17:59:47
我的问题似乎有点长,但我知道解决方案是对我的代码进行轻微的更正。我正在表单1 中实现一个由3个鼠标事件和一个绘画事件组成的序列
pictureBox1_鼠标向下,pictureBox1_鼠标移动,pictureBox1_ Paint,pictureBox1_MouseUp。
代码应该是这样工作的:当我点击鼠标并拖动它并在所需的点释放按钮时,应该会出现一个接受输入值的自定义消息框。因此,我构建了一个显示为消息框的表单(form2)。这是我的表单1的代码,你可以在看到代码后理解问题。
形式1:
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)
{
}
}
}
这里的问题是:
1) 根据代码,当我们拖动鼠标时,会出现一个矩形,而我们离开鼠标按钮的地方会出现一条消息框,现在这个消息框(form2)无法读取输入值,因为我不知道如何将form2的OK和CANCEl按钮与form1连接起来。在输入并按下OK后,矩形应该会消失,但这里没有发生。
2) 我只需要输入两次,也就是说,我只执行了两次之前的动作序列(所有鼠标事件和绘画事件),所以我相应地编写了FOR循环。但问题是消息框(form2)每次都会被触发,我松开鼠标按钮。这导致了一个严重的问题,因为在给出两个输入之后,我必须实现一个mousedoubleclick事件。
请告诉我我必须做的必要的更正。提前谢谢。
我不知道你说的"将form2的OK和CANCEL按钮与form1连接起来"是什么意思?
你不必"连接"任何东西。您只需要Form2上的两个按钮(OK和Cancel),在每个_click方法中,您需要this.DialogResult = DialogResult.OK;
表示OK,this.DialogResult = DialogResult.Cancel;
表示Cancel。
然后你继续学习中一的"如果"。
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_MouseUp
并到达for循环时,循环"i"都将设置为"0",然后循环开始
在Form1的构造函数中需要一个int TwoClicks = 0
。您必须相应地更改pictureBox1_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();
}
}
}
请随意提问(如果我没有答对,请描述你的第一个问题)。