Неоднозначный метод Show и ShowDialog для отображения Winform - PullRequest
0 голосов
/ 28 октября 2011

Я борюсь между Показать и ShowDialog метод отображения / отображения Windows Forms.Я обычно использую метод show вместо метода ShowDialog.И метод ShowDialog используется, когда я не хочу показывать формы в ALT + TAB ToolWindow.

Метод ShowDialog показывает форму окна модели который имеет ограниченный доступ, чем обычная форма окна.Форма окна модели не имеет доступа к значению элемента управления и объекта, который уже передан в обычную форму окна.Следовательно, мы должны предоставлять новое значение каждый раз или каждый раз для нового экземпляра форм, что является реальным примером, как показано ниже.

//Purchase_Entry having a public method which is calling from form30 as under:

public partial class purchase_Entry : Form
{
    public purchase_Entry()
    {
        InitializeComponent();
    }

    public void Purchase_Binding()
    {
        mydgv.Location = new Point(0, 110);
        mydgv.RowHeadersVisible = false;
        mydgv.Width = panel2.Width;
        mydgv.Height = panel2.Height - 220;
        mydgv.TabIndex = 4;

        string connstr = "server=.;initial catalog=maa;uid=mah;pwd=mah";
        SqlConnection con = new SqlConnection(connstr);
        con.Open();

        string sql = @"select billno,date=convert(varchar,date,103),ledgeraccount,totcts,rround,grosspurchase,taxes,taxamt,totdb,narrat" +
                     " from depurchasea where companyID=@companyID" +
                     " and transID=@transID" +
                     " group by billno,date,ledgeraccount,totcts,rround,grosspurchase,taxes,taxamt,totdb,narrat" +
                     " order by date,billno";

        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Parameters.AddWithValue("companyID", label6.Text);
        cmd.Parameters.AddWithValue("transID", textBox5.Text);
        SqlDataAdapter dap = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        dap.Fill(ds);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            textBox2.Text       = Convert.ToString(ds.Tables[0].Rows[i]["billno"]);
            maskedTextBox1.Text = Convert.ToString(ds.Tables[0].Rows[i]["date"]);
            textBox1.Text       = Convert.ToString(ds.Tables[0].Rows[i]["ledgeraccount"]);
            textBox9.Text       = Convert.ToString(ds.Tables[0].Rows[i]["totcts"]);
            textBox7.Text       = Convert.ToString(ds.Tables[0].Rows[i]["rround"]);
            textBox13.Text      = Convert.ToString(ds.Tables[0].Rows[i]["grosspurchase"]);
            comboBox1.Text      = Convert.ToString(ds.Tables[0].Rows[i]["taxes"]);
            textBox8.Text       = Convert.ToString(ds.Tables[0].Rows[i]["taxamt"]);
            textBox6.Text       = Convert.ToString(ds.Tables[0].Rows[i]["totdb"]);
            textBox3.Text       = Convert.ToString(ds.Tables[0].Rows[i]["narrat"]);
        }

        //mydgv.Columns.Clear();

        string mysql = "select srno,particulars,carats,rate,debit from depurchasea" +
                     " where companyID=@companyID" +
                     " and transID=@transID";
        SqlCommand mycmd = new SqlCommand(mysql, con);
        mycmd.Parameters.AddWithValue("companyID", label6.Text);
        mycmd.Parameters.AddWithValue("transID", textBox5.Text);
        SqlDataAdapter mydap = new SqlDataAdapter(mycmd);
        DataSet myds = new DataSet();
        mydap.Fill(myds);
        mybinding = new BindingSource();
        mybinding.DataSource = myds;
        mybinding.DataMember = myds.Tables[0].TableName;
        mydgv.DataSource = mybinding;

        mydgv.Columns[0].HeaderText = "Sr.No.";
        mydgv.Columns[1].HeaderText = "Particulars";
        mydgv.Columns[2].HeaderText = "Carats";
        mydgv.Columns[3].HeaderText = "Rate";
        mydgv.Columns[4].HeaderText = "Amount";

        mydgv.Columns[0].Width = 50;
        mydgv.Columns[1].Width = 500;
        mydgv.Columns[4].Width = 100;
        mydgv.Columns[2].Width = 100;
        mydgv.Columns[3].Width = 100;

        mydgv.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
        mydgv.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
        mydgv.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight;
        mydgv.Columns[2].DefaultCellStyle.Format = "f2";
        mydgv.Columns[3].DefaultCellStyle.Format = "f2";
        mydgv.Columns[4].DefaultCellStyle.Format = "f2";
        mydgv.Columns[4].ReadOnly = true;

        int dgvsize = mydgv.Width / 17;
        mydgv.Columns[0].Width = dgvsize;
        mydgv.Columns[1].Width = dgvsize * 10;
        mydgv.Columns[2].Width = dgvsize * 2;
        mydgv.Columns[3].Width = dgvsize * 2;
        mydgv.Columns[4].Width = dgvsize * 2;
        mydgv.Refresh();

        if (textBox13.Text != "")
        {
            decimal res = Convert.ToDecimal(textBox13.Text);
            textBox13.Text = res.ToString("f2");
        }
    }

public partial class Form30 : Form
{
    public Form30()
    {
        InitializeComponent();
    }

    private void listView1_KeyPress(object sender, KeyPressEventArgs e)
    {


        else if (textBox2.Text == "Purchase")
        {
             purchase_Entry pc = new purchase_Entry();
             pc.lbl6.Text  = pp.Form1.IDD.Text; //companyID
             pc.Purchase_Binding() //Calling public method of purchase_entry Class
             pc.ShowDialog(this);
             pc.textboxKeypress += new purchase_Entry.Action(pc_textboxKeypress);
             pc.purkeydown += new purchase_Entry.Action(pc_purkeydown);

         }
     }

Вызывающий метод Purchase_Binding () из purchase_Entry Форма для Show () метод работает очень хорошо, но если я использую то же самое в методе ShowDialog () , то он будет отображать записи, новыравнивание элементов управления изменено.Это означает, что мне нужно выдать новое значение каждого размера элемента управления, высоты, ширины и companyID для экземпляра, отображаемого в методе ShowDialog () .

Если это так, то он будет работать как осел.для меня, потому что я должен перепроектировать purchase_Entry по методу ShowDialog().

Каков наилучший способ?. Если я имею дело с методом Show () тогда форма будет отображаться в ALT + TAB ToolWindow , и я не хочу, чтобы она отображалась в ALT + TAB ToolWindow .Вот почему я использовал метод ShowDialog () , который будет отображаться как форма окна модели и не будет отображаться при ALT + TAB ToolWindow.

А если я использую метод ShowDialog(), тоЯ должен быть готов перепроектировать это как работы осла.Не так ли?

Ответы [ 3 ]

1 голос
/ 28 октября 2011

Попробуйте изменить порядок вызовов.

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.moto();
    f2.ShowDialog();
}

Причина, по которой вы не видите эффекта от вызова moto при использовании ShowDialog, заключается в том, что ShowDialog блокирует текущий исполняемый поток до закрытия формы, что означаетметод moto не вызывается до тех пор, пока форма не будет закрыта.

0 голосов
/ 28 октября 2011

Я надеюсь, что это может помочь вам

Это ваш конструктор по умолчанию, сделайте больше в соответствии с данными

public Form2()
{
   InitializeComponent();
}

public Form2(int id)
{
    InitializeComponent();
    if(id == 101)
        textBox1.Text = "MAHESH";
}

public Form2(string name)
{
    InitializeComponent();    
    textBox1.Text = name;
}

Сделайте вызов, как вам нужно, и передайте значение, вы можетеинкапсулировать дальнейшую обработку в различные методы и сделать вызов.

Загрузка новой формы будет выполняться только после ShowDialog()

0 голосов
/ 28 октября 2011

Form.ShowDialog показать форму в модальном режиме. Это означает, что код ниже Form.ShowDialog никогда не будет выполняться, пока форма открыта.

В вашем случае, если ваш метод зависит от идентификатора, вы должны инициализировать идентификатор до того, как вызовете функцию f2.moto (), например, перед ShowDialog.

public partial class Form2 : Form
{
    public Form2(int id)
    {
        InitializeComponent();
        label1.Text = id.ToString();
    }

    public void moto()
    {
        textBox1.Text = "MAHESH";
    }
}

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(101);
    f2.moto();
    f2.ShowDialog();
}

EDIT:

Если вы не используете параметризованный конструктор форм, вы также должны инициализировать Id перед вызовом ShowDialog.

Используйте идентификатор открытого свойства в классе Form2:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public void moto()
    {
        textBox1.Text = "MAHESH";
    }

    public int Id
    {
       set {label1.Text = value.ToString();}
    }
}

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.Id = 101;
    f2.moto();
    f2.ShowDialog();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...