gpt4 book ai didi

c# - 如何处理鼠标事件

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:05 25 4
gpt4 key购买 nike

我想在一个正方形内单击,然后应该会出现一个“X”,但我不确定要在 Form1_MouseDownForm1_PaintForm1_MouseUp 事件。我如何实现这是 C#?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace VTest
{
public partial class Form1 : Form
{
Rectangle rect; // single rect
int sqsize, n;
int margin;

public Form1()
{
n = 3;
margin = 25;
sqsize = 50;
rect = new Rectangle(10, 10, 150, 150);
InitializeComponent();
}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
// what goes here?
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
// what goes here?
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
// what goes here?
}

// ...

最佳答案

在您的 MouseDown 事件中,确定点击是否发生在您的矩形内很容易:

if (rect.Contains(e.Location))
{
// the user has clicked inside your rectangle
}

在表单上画“X”也很简单:

Graphics g = this.CreateGraphics();
g.DrawString("X", this.Font, SystemBrushes.WindowText,
(float)e.X, (float)e.Y);

但是,在这种情况下,“X”不会持久存在,这意味着如果您将另一个表单拖到您的表单上,然后将其移开,“X”将不再存在。要绘制持久的“X”,请创建一个表单级的 Point 变量,如下所示:

private Point? _Xlocation = null;

如果用户单击您的矩形,请使用您的 MouseDown 事件设置此变量:

if (rect.Contains(e.Location))
{
_Xlocation = e.Location;
this.Invalidate(); // this will fire the Paint event
}

然后,在您表单的 Paint 事件中,绘制“X”:

if (_Xlocation != null)
{
e.Graphics.DrawString("X", this.Font, SystemBrushes.WindowText,
(float)e.X, (float)e.Y);
}
else
{
e.Graphics.Clear(this.BackColor);
}

如果您希望“X”在用户松开鼠标按钮时消失,只需将此代码放入 MouseUp 事件中:

_Xlocation = null;
this.Invalidate();

您可以根据需要使它变得更复杂。使用此代码,“X”将绘制在您单击表单的任何位置的正下方和右侧。如果您希望“X”在点击位置居中,您可以使用 Graphics 对象的 MeasureString 方法来确定“X”的高度和宽度,并相应地偏移 DrawString 位置.

关于c# - 如何处理鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1515295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com