C# Winforms Region.IsVisible
C# Winforms Region.IsVisible
我想检测鼠标点击我自定义创建的区域。
1) 我已经用矩形试过这个代码并且它有效,但是用字符串它没有
GraphicsPath gp = new GraphicsPath();
Region reg = new Region();
private void Form1_Load(object sender, EventArgs e)
{
gp.AddString("TEXT", new FontFamily("Arial"),0, 20.0f, new Point(300, 10), StringFormat.GenericDefault);
gp.Widen(Pens.AliceBlue);
reg = new Region(gp);
}
这是第二部分
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (reg.IsVisible(e.Location))
{
MessageBox.Show("aaaa");
}
}
它不显示消息框。 :)
编辑:这是我的 Paint 事件以查看我的字符串在哪里
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawString("TEXT", new Font("Arial", 20), Brushes.Yellow, 300,100 );
}
最基本的错误是打字错误:一次是在 y = 10
绘制,另一次是在 y = 100
。
但是还有一个问题一点也不明显:
添加
e.Graphics.FillPath(Brushes.Firebrick, gp);
到 Paint
事件,您会看到它:字体的大小完全不同。
这是因为在向 GraphicsPath
添加文本时,它使用的比例(称为 'emSize')与 Graphics.DrawString
不同,它使用 'Point'.
要适应你可以使用这个:
float fontsize = 20.0f;
using (Graphics g = panel1.CreateGraphics()) fontsize *= g.DpiY / 72f;
现在您可以构建 GraphicsPath
,最好使用正确的坐标..:[=19=]
gp.AddString("TEXT", new FontFamily("Arial"), 0, fontsize,
new Point(300, 100), StringFormat.GenericDefault);
我想检测鼠标点击我自定义创建的区域。
1) 我已经用矩形试过这个代码并且它有效,但是用字符串它没有
GraphicsPath gp = new GraphicsPath();
Region reg = new Region();
private void Form1_Load(object sender, EventArgs e)
{
gp.AddString("TEXT", new FontFamily("Arial"),0, 20.0f, new Point(300, 10), StringFormat.GenericDefault);
gp.Widen(Pens.AliceBlue);
reg = new Region(gp);
}
这是第二部分
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
if (reg.IsVisible(e.Location))
{
MessageBox.Show("aaaa");
}
}
它不显示消息框。 :)
编辑:这是我的 Paint 事件以查看我的字符串在哪里
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawString("TEXT", new Font("Arial", 20), Brushes.Yellow, 300,100 );
}
最基本的错误是打字错误:一次是在 y = 10
绘制,另一次是在 y = 100
。
但是还有一个问题一点也不明显:
添加
e.Graphics.FillPath(Brushes.Firebrick, gp);
到 Paint
事件,您会看到它:字体的大小完全不同。
这是因为在向 GraphicsPath
添加文本时,它使用的比例(称为 'emSize')与 Graphics.DrawString
不同,它使用 'Point'.
要适应你可以使用这个:
float fontsize = 20.0f;
using (Graphics g = panel1.CreateGraphics()) fontsize *= g.DpiY / 72f;
现在您可以构建 GraphicsPath
,最好使用正确的坐标..:[=19=]
gp.AddString("TEXT", new FontFamily("Arial"), 0, fontsize,
new Point(300, 100), StringFormat.GenericDefault);