C # Winforms Region.IsVisible - PullRequest
       10

C # Winforms Region.IsVisible

0 голосов
/ 08 сентября 2018

Я хочу обнаружить щелчок мышью в моем специально созданном регионе.

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);
    }

и здесьявляется part2

  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 Ответ

0 голосов
/ 08 сентября 2018

Самая основная ошибка - опечатка: один раз вы рисуете на 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, лучше всего с правильными координатами ..:

gp.AddString("TEXT", new FontFamily("Arial"), 0, fontsize, 
             new Point(300, 100), StringFormat.GenericDefault);
...