10 분마다 열리는 간단한 정보 창인 “fm” 양식이 있습니다 ( fm.Show();
).
10 분마다 “fm” 양식 이 열려 있는지 확인 하고 열려 있으면 닫았다가 다시 열도록 할 수 있습니다!
이제 양식 fm은 항상 생성 form fm = new form();
되므로 양식이 열려 있는지 확인하려고 할 때 이전에 양식이 하나 있어도 항상 거짓이고 새 창을 엽니 다!
고유 한 신원을 부여 할 수있는 도구가 필요하며 고유 한 신원을 가진이 양식이 열렸는지 확인해야합니다!
버튼이있는 복잡한 정보가 있기 때문에 양식 (fm)의 데이터 만 업데이트하고 싶지 않습니다.
양식 이름은 "UpdateWindow"
감사
답변
아마도 이것이 도움이 될 것입니다.
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
//iterate through
if (frm.Name == "YourFormName")
{
bFormNameOpen = true;
}
}
foreach의 일부 코드는 특정 형식을 감지하고 수행 할 수 있습니다. 그래도 테스트되지 않았습니다.
에서 찾을 수 http://bytes.com/topic/c-sharp/answers/591308-iterating-all-open-forms
답변
늦었다는 건 알지만 … 궁금한 분들을 위해 …
if (Application.OpenForms.OfType<UpdateWindow>().Count() == 1)
Application.OpenForms.OfType<UpdateWindow>().First().Close();
UpdateWindow frm = new UpdateWindow()
frm.Show();
답변
메뉴에서 양식을 호출하고 MDI 양식을 클릭한다고 가정하면 다음과 같이 최상위 수준에서 해당 양식의 인스턴스 선언을 만들어야합니다.
Form1 fm = null;
그런 다음 다음과 같이 Form1을 호출하는 메뉴 클릭 이벤트를 정의해야합니다.
private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (fm == null|| fm.Text=="")
{
fm = new Form1();
fm.MdiParent = this;
fm.Dock = DockStyle.Fill;
fm.Show();
}
else if (CheckOpened(fm.Text))
{
fm.WindowState = FormWindowState.Normal;
fm.Dock = DockStyle.Fill;
fm.Show();
fm.Focus();
}
}
CheckOpened는 Form1에 이미 열거 나하지되어 있는지 확인하기 위해 정의 :
private bool CheckOpened(string name)
{
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Text == name)
{
return true;
}
}
return false;
}
이것이 이미 열려 있거나 최소화 된 경우 메뉴 클릭시 Form1에 초점을 맞추는 양식의 여러 인스턴스를 만드는 문제가 해결되기를 바랍니다.
답변
나는 그 진술을 이해했는지 잘 모르겠습니다. 도움이 되었기를 바랍니다. 이 폼의 인스턴스를 하나만 사용하려면 사용자 닫기시 Form.Dispose 호출을 방지해야합니다 . 이를 위해 자식 폼의 Closing 이벤트를 처리 할 수 있습니다.
private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
}
그런 다음 새 인스턴스를 만들 필요가 없습니다 frm
. 인스턴스에서 Show 메서드를 호출하기 만하면됩니다.
Form.Visible 속성을 확인하여 현재 양식이 열려 있는지 확인할 수 있습니다.
private ChildForm form = new ChildForm();
private void ReopenChildForm()
{
if(form.Visible)
{
form.Hide();
}
//Update form information
form.Show();
}
사실, 양식의 데이터를 업데이트하지 않는 이유를 여전히 이해하지 못합니다.
답변
Form fc = Application.OpenForms["UpdateWindow"];
if (fc != null)
fc.Close();
fc.Show();
답변
Form1 fc = Application.OpenForms["Form1 "] != null ? (Form1 ) Application.OpenForms["Form1 "] : null;
if (fc != null)
{
fc.Close();
}
다음을 사용하여 원하는 경우 해당 양식을 다시 열 수 있습니다.
Form1 frm = New Form1();
frm.show();
답변
if( ((Form1)Application.OpenForms["Form1"]).Visible == true)
//form is visible
else
//form is invisible
Form1
양식의 이름은 어디에 있습니까 ?