我在A类中有一个布尔 control_refresh ,并且在一个内部A i的类中有一个函数,其中是control_refresh = true;。代码编译得很好。
file_1.cs
public partial class graficki_editor : Form
{
...
internal bool control_refresh = false;
...
}
file_3.cs
public partial class graficki_editor : Form
{
...
private void canvas_paint(object sender, PaintEventArgs e)
{
debug_label.Text = control_refresh.ToString();
}
...
}
file_2.cs
internal class projekt : graficki_editor
{
...
private void sloj_Checked(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
objekti.ElementAt(pan.Controls.IndexOf(((CheckBox)sender).Parent)).visible = true;
else objekti.ElementAt(pan.Controls.IndexOf(((CheckBox)sender).Parent)).visible = false;
control_refresh = true;
canvas.Refresh();
}
....
}
(不包括非相关代码)
在 sloj_Checked 的范围内,我可以设置 control_refresh ,并且在范围内它可以正常工作。但是当刷新控件并调用paint事件时,变量保持不变。
我的问题是如何更改变量?
应Scott Chamberlain的要求:
static void Main()
{
...
Application.Run(new graficki_editor());
}
public partial class graficki_editor : Form
{
...
public void novaSlika(int sirina, int visina, string ime, Color odabir)
{
projekt nova = new projekt();
}
}
答案 0 :(得分:0)
您应该在sloj_Checked 方法
中调用Control.Invalidate Method// canvas.Refresh(); // do not call refresh
canvas.Invalidate();
答案 1 :(得分:0)
在
public void novaSlika(int sirina, int visina, string ime, Color odabir)
{
projekt nova = new projekt();
}
您正在创建第二个表单,它是一个完全独立的窗口,您永远不会调用nova.Show()
来查看它。这就是为什么当您更改父表单nova
中的graficki_editor
属性时,不会更改。