为了账号安全,请及时绑定邮箱和手机立即绑定

C# Winforms Region.IsVisible

C# Winforms Region.IsVisible

C#
千巷猫影 2022-01-09 14:34:06
我想检测鼠标点击我自定义创建的区域。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);    }这是第2部分  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 );    }
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

最基本的错误是一个错字:一次在 绘制y = 10,另一次在y = 100。


但是还有一个问题根本不那么明显:


添加


e.Graphics.FillPath(Brushes.Firebrick, gp);

到Paint事件,你会看到它:字体有完全不同的大小。


这是因为在向 a 添加文本时,GraphicsPath它使用的比例(称为'emSize')与Graphics.DrawString使用 'Point' 的比例不同。


为了适应你可以使用这个:


float fontsize = 20.0f;

using (Graphics g = panel1.CreateGraphics()) fontsize *= g.DpiY / 72f;

现在您可以GraphicsPath使用正确的坐标构建, best ..:


gp.AddString("TEXT", new FontFamily("Arial"), 0, fontsize, 

             new Point(300, 100), StringFormat.GenericDefault);


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信