문제

showdialog ()를 최상위로 설정할 수있는 방법이 있습니까? 나는 모든 관련 질문을 보았지만 상당히 내 상황과 일치했습니다.

내가하는 일은 DataGridView 버튼 열에서 새 winform을 열 수 있습니다. 이 새로운 양식은 몇 개의 SQLITE 테이블에서 정보를 가져오고 사용자가 버튼을 클릭 한 행에 정보를 추가 할 수 있습니다.

아래 코드를 사용하여 Winform을 열었습니다. showdialog () 메소드를 사용하여 사용자가 정보를 양식으로 저장하거나 취약하는지 알 수 있습니다.

Pay_Bill_Window paywindow = new Pay_Bill_Window(getClickedRowID);
if (paywindow.ShowDialog() == DialogResult.OK)
{
    FillPendingPaymentDataGrid(dbAccess.GetPendingBills());
}

DataGridView에 정보를 다시로드 해야하는지 알 수 있도록이 작업을 수행합니다.

사용자가 창에 채울 수있는 정보는 웹 브라우저와 같은 다른 소스에서 나온 것이므로 양식이 모든 응용 프로그램 위에 있으면 이상적이지 않습니다.

창이 모든 응용 프로그램 위에있는 것을 막을 수있는 방법이 있습니까 (일련의 Windows에서 가장 상위 상위는 괜찮습니다), 또는 사용자가 다른 형태를 클릭하는 버튼을 알리는 방법이 있습니까 (기본적으로 사용하여 기본적으로 사용하는 방법이 있습니까? paywindow.Show() 그리고 다른 유형의 반품을보고)?

도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

다음과 같은 것을 사용하십시오 : form1 :

  private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Show();
            frm.FormIsClosing += frm_FormIsClosing;

        }

        void frm_FormIsClosing(object sender, DialogResult rsl)
        {
            if (rsl == System.Windows.Forms.DialogResult.Yes)
                MessageBox.Show("We got it");
        }

form2 :

   public delegate void IsClosing(object sender, DialogResult rsl);

        public event IsClosing FormIsClosing;


        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            FormIsClosing(this, System.Windows.Forms.DialogResult.Yes);
        }

그런 다음 Form2를 닫고 Formisclosing Fires를 닫으면 1에서 잡을 수 있습니다.)

다른 팁

기본적으로 양식은 "모든 응용 프로그램에 대해"에서 최상위가되어서는 안됩니다. 그 행동을보고 있다면 부동산이 디자이너에 설정 되었기 때문일 수 있습니다. 디자이너의 속성을 설정하지 않거나 다음을 시도하십시오.

using ( Form form = CreateMyForm() ) {
  form.TopMost = false;
  form.ShowDialog(parent);
  ...
}

나는 함께 보여줄 때 양식이 가장 큰 것을 막을 수있는 방법을 찾지 못했습니다. ShowDialog() (이것은 양식을 모달로 보여 주며, 그것을 무시하는 방법을 모르겠습니다).

그러나 나는 Show(), form.Disposed 이벤트 이 stackoverflow 질문.

에서 이안:

Form2 form2 = null;

void button_click(object sender, EventArgs e) 
{     
    if(form2 == null)   
    {
        form2 = new Form2();
        form2.Disposed += new EventHandler(f_Disposed);
        form2.Show();
    }
}

void f_Disposed(object sender, EventArgs e) 
{
    form2 = null; 
}

내가 알 수있는 한, 이것은 양식이 닫힌 이유를 알 수 없습니다. DialogResult), 이벤트가 시작됩니다 모든 양식이 닫히고 내 상황에서는 괜찮습니다.

paywindow.ShowDialog(this)

작동해야합니다. 추가 매개 변수는 부모의 모습을 알려주고 부모 위에 계층을 만들지 만 최상위는 아닙니다. 최상위는 다른 창을 활성화하더라도 창이 데스크탑에 달라 붙는 것을 의미합니다. 그것은 showdialog의 기본 동작이 아닙니다. Jaredpar가 언급했듯이 양식/창을 최상위로 설정하십시오.

paywindow.ShowDialog(this)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top