[英]Draw a rectangle in a panel of a form when a button click event is fired from another form
我目前正在使用Windows窗體應用程序,其中有兩個窗體。 form1和form2。 在form1內有一個按鈕,單擊該按鈕時會打開form2,而我要在單擊Form2內的按鈕時在form1的面板內創建一個矩形。 我在form2的按鈕單擊事件中放入了一些代碼來創建矩形,但是單擊時它什么也沒顯示。 但是,每當我將draw.rectangle方法放入單擊按鈕的相同窗體內時,它都可以工作,但是不同的是,它不會
這是form1中的代碼
private void btnSave_Click(object sender, EventArgs e)
{
Layoutsetting a = new Layoutsetting();
a.ShowDialog();
}
public void DrawObject()
{
Graphics g = panel1.CreateGraphics();
Rectangle rect = new Rectangle(10, 10, 80, 90);
rect.Inflate(-10, -10);
g.DrawRectangle(black, rect);
g.FillRectangle(Brushes.BlueViolet, rect);
StringFormat f = new StringFormat();
f.LineAlignment = StringAlignment.Center;
f.Alignment = StringAlignment.Center;
g.DrawString("Hello", this.Font, Brushes.GhostWhite, rect, f);
panel1.Refresh();
}
這是form2中的代碼
private void btnConfirm_Click(object sender, EventArgs e)
{
Form1.Default.DrawObject();
this.Close();
}
您必須向Paint添加一個方法:
panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.draw);
private void draw(object sender, PaintEventArgs e)
{
if(buttonClicked) {
Graphics g = e.Graphics;
//...
}
}
問題不在於繪制矩形,每當面板的一小部分被隱藏時(例如,它的一部分位於另一個表單后面),面板油漆事件就會觸發並重新繪制面板,因此矩形消失(但是當矩形是活動狀態,不會觸發繪制事件,除非您需要重新繪制面板,否則矩形將被繪制並且不會被清除。)
簡易解決方案:
創建矩形圖像,並在需要時用作背景圖像,而不是繪制它。
另一個解決方案:
在表單(或面板)中添加屬性:
public bool NeedsToBeDrawn {get; set;}
而不是這行代碼:
Form1.Default.DrawObject();
只需將屬性設置為true即可:
Form1.NeedsToBeDrawn = true;
並將代碼移至面板的繪畫事件:
private void panel1_Paint(object sender, PaintEventArgs e)
{
if(NeedsToBeDrawn)
{
Rectangle rect = new Rectangle(10, 10, 80, 90);
rect.Inflate(-10, -10);
e.Graphics.DrawRectangle(black, rect);
e.Graphics.FillRectangle(Brushes.BlueViolet, rect);
StringFormat f = new StringFormat();
f.LineAlignment = StringAlignment.Center;
f.Alignment = StringAlignment.Center;
e.Graphics.DrawString("Hello", this.Font, Brushes.GhostWhite, rect, f);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.