Я пытаюсь избежать мерцания формы в моем приложении для 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();
}
Спасибо.