我试图避免在Windows应用程序(MDI)中闪烁表格,但无法完全避免。
我尝试过的...
1)我已将此代码放入form.cs
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
2)启用了窗体和面板的双重缓冲
typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, pnlNotification, new object[] { true });
typeof(Form).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, this, new object[] { true });
主要问题
我上面的代码运行良好,但是当我最小化我的应用程序并再次最大化它时,闪烁再次开始。
我的表单结构
我在每种表单中都使用了一个父面板,并将所有控件放入该面板中。
我是这样叫MDI Parent的表格
if (menuStrip1.Enabled == true)
{
frmProductSale ProductSale = new frmProductSale(this);
ProductSale.MdiParent = this;
ProductSale.Show();
}
和子窗体代码..
构造函数...
public frmProductSale(frmHome Hm)
{
InitializeComponent();
Home = Hm;
}
加载
private void frmProductSale_Load(object sender, EventArgs e)
{
UserName = ((Label)Home.Controls.Find("lblUserName", true).SingleOrDefault()).Text;
BrowseStatus = (Label)Home.Controls.Find("lblBrowseStatus", true).SingleOrDefault();
ResetStatus = (Label)Home.Controls.Find("lblResetStatus", true).SingleOrDefault();
SaveUpdateStatus = (Label)Home.Controls.Find("lblSaveUpdateStatus", true).SingleOrDefault();
RecordSelectionStatus = (Label)Home.Controls.Find("lblRecordSelectionStatus", true).SingleOrDefault();
QuantityStatus = (Label)Home.Controls.Find("lblQuantityStatus", true).SingleOrDefault();
ImportantMethods.CreateEvents(pnlProductSale, this, "Product Sale");
FillValues(this, UserName);
txtPatientName__L.Focus();
}
谢谢。