Как нарисовать Rectangle после запуска вручную из WinForm? - PullRequest
0 голосов
/ 12 февраля 2019

Я собираюсь создать программу, которая рисует различные формы на экране.Для этого я создал два WinForme.Первый (ActiveHandle) предназначен для выбора фигуры для рисования.Для этого я использовал флажки, каждый из которых описывает значение в файле настроек.Это работает до сих пор.Но если я сейчас открою вторую форму (form1.Show ()), чтобы нарисовать графику без фона на экране, это не сработает.

Мой вопрос сейчас.Что я упустил из виду или что я должен улучшить, чтобы увидеть изображение?Когда я использую form1 в качестве StartForm, все работает отлично.

Здесь у меня есть исходный код двух форм.

ActiveHandle (Control form1 и shape) (активный или деактивный bShapeDrawing в form1)

public partial class ActiveHandle : Form
{
    public ActiveHandle()
    {
        InitializeComponent();
    }

    private void ActiveHandle_Load(object sender, EventArgs e)
    {

    }

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBox1.Checked == true)
        {
            Properties.Settings.Default.bShapeDrawing = true;
        }
        else
        {
            Properties.Settings.Default.bShapeDrawing = false;
        }            
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Visible = false;

        Form1 form1 = new Form1();
        form1.Show();
    }
}

Form1 (рисует фигуры без фона и рамки на экране, когда нажата правая кнопка мыши и bShapeDrawing равно true)

public partial class Form1 : Form
{
    public int iWidth;
    public int iHight;       

    public Form1()
    {
        InitializeComponent();            
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        int iWidth = SystemInformation.VirtualScreen.Width;
        int iHight = SystemInformation.VirtualScreen.Height;

        Console.WriteLine("Form1 loading");            
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        Console.WriteLine("Form1 timer1 is ticking");
        if (Properties.Settings.Default.bShapeDrawing == true)
        {
            Console.WriteLine("Form1 trying to draw");
            Graphics g = this.CreateGraphics();
            Pen selPen = new Pen(Color.Red, 2);

            if (Control.MouseButtons == MouseButtons.Right)
            {
                g.DrawRectangle(selPen, iWidth / 2 - 5, iHight / 2 - 5, 5, 5);
                Console.WriteLine("Form1 drawing complete");
            }
            else
            {
                this.Invalidate();
            }
        }
        else
        {
            // Drawing deactivated
        }
    }
}
...