-1

これは私がデザインした form1 です。form1 のテキスト ボックスに入力emp idして検索ボタンをクリックすると、form2 が表示されます。

この 2 番目のフォームでは、対応するすべての詳細を運ぶ必要があり、emp id対応するテキスト ボックスに詳細を表示する必要があります。

SQL Server にテーブルを作成しましempた... に基づいてデータベースから従業員の詳細を取得したいと思いますemp id。これは私のコードです:

フォーム1:

private void btnsearch_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(tbempid.Text);
    f2.Show();
    SqlConnection con = new SqlConnection("Data Source=RAJIM-PC;Initial Catalog=Practicing;User ID=sa;Password=RajiSha");

    try
    {
        con.Open();
        SqlCommand com = new SqlCommand("SELECT eid,emp_name,mobile_no FROM emp WHERE ID='" + tbempid.Text.Trim() + "'", con);
        com.CommandType = CommandType.Text;
        DataTable dtb = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(com);
        da.Fill(dtb);

        if (dtb.Rows.Count > 0)
        {
            Form2.txtempid.Text= dtb.Rows[0]["eid"].ToString();
            Form2.txtempname.Text = dtb.Rows[0]["emp_name"].ToString();
            Form2.txtmbno.Text= dtb.Rows[0]["mobile_no"].ToString();
        }

        FormCollection fc = System.Windows.Forms.Application.OpenForms;

        foreach (Form f in fc)
        {
            if (f.Name == "Form2")
            {
                f.Update();
            }
        }
    }
    catch (SqlException sql) 
    { 
        System.Windows.Forms.MessageBox.Show(sql.Message); 
    }
    finally
    {
        if (con.State == ConnectionState.Open)
        {
            con.Close();
            con.Dispose();
        }
    } 
}

フォーム2:

public partial class Form2 : Form
{
    public static string txtempid;
    public static string txtempname;
    public static string txtmbno;

    public Form2(string strtxtbox)
    {
        InitializeComponent();
        tbempid.Text = strtxtbox;
    }
}
4

4 に答える 4

0

Form1 で Form2 に入力するためのすべての作業を行っているように見えます。コードを Form2 に移動し、Form2 のコンストラクターから呼び出すことをお勧めします。これはより理にかなっているだけでなく、結果を得るためにデータベースを 1 回だけヒットすることを意味します。

または、Form1 から Form2 にデータ テーブルを渡し、Form2 のコンストラクターで値を使用することもできます。ここでも、データベースへの 2 番目のクエリを保存します。

于 2014-12-23T11:17:18.343 に答える
0

以下に示すように、フォーム 2 のコンストラクターを使用できます。

 public Form2(string txtempid, string txtempname, string txtmbno)
        {
            InitializeComponent();
            txtempid.Text = txtempid;
            txtempname.Text = txtempname;
            txtmbno.Text = txtmbno;
        }

そしてフォーム1で:-

var form2 = new Form2(dtb.Rows[0]["eid"].ToString(), dtb.Rows[0]["emp_name"].ToString(), dtb.Rows[0]["mobile_no"].ToString());  
于 2014-12-23T11:22:09.633 に答える
0

ここに変更する必要Form2があります。f2

Form2.txtempid.Text= dtb.Rows[0]["eid"].ToString();
Form2.txtempname.Text = dtb.Rows[0]["emp_name"].ToString();
Form2.txtmbno.Text= dtb.Rows[0]["mobile_no"].ToString();    

したがって、次のようになります。

f2.txtempid.Text= dtb.Rows[0]["eid"].ToString();
f2.txtempname.Text = dtb.Rows[0]["emp_name"].ToString();
f2.txtmbno.Text= dtb.Rows[0]["mobile_no"].ToString();  

更新 1

これらのフィールドを文字列変数に割り当てようとしています。ただし、次のように関連するテキスト ボックス コントロールに割り当てる必要があります。

Form2tbempidに 、tbempname、という名前の 3 つのテキスト ボックスがあるとします。tbmbno

f2.tbempid.Text= dtb.Rows[0]["eid"].ToString();
f2.tbempname.Text = dtb.Rows[0]["emp_name"].ToString();
f2.tbmbno.Text= dtb.Rows[0]["mobile_no"].ToString();  

更新 2

保護レベルのため、次の機能を追加する必要がありますForm2

public void SetTextBoxes(string strempid, string strempname, string strmbno)
{
    tbempid.Text = strempid;
    tbempname.Text = strempname;
    tbmbno.Text = strmbno;
}

3 行を次のように変更します。

f2.SetTextBoxes(dtb.Rows[0]["eid"].ToString(), dtb.Rows[0]["emp_name"].ToString(), dtb.Rows[0]["mobile_no"].ToString());  
于 2014-12-23T11:25:52.750 に答える
0

以下は、上で提案したことをまとめた非常に簡単な例です。わかりやすくするために、ベスト プラクティスに従っているわけではありません。以下で注目すべき領域は、EmployeeModel クラスForm1およびForm2 ソースです。

ここでの考え方は、両方のフォームがアクセスできるコンテナーとして EmployeeModel クラスを利用することです。

Form1は社員情報を取得します。(モデル クラスには任意の情報を含めることができることに注意してください。プロパティだけに予約する必要はありません。必要に応じて、ここでデータセットへの参照を保持できます。)

フォーム 2 には、この EmployeeModel クラスへの参照があります。ボタン クリック イベントが form1 で発生すると、新しい EmployeeModel クラス オブジェクトが作成され、form2 に表示される関連情報で初期化されます。次に、Form2 のオーバーロードされたコンストラクターを使用して、オブジェクト参照として渡されます。

Form2 の Onload イベントで、label.Text プロパティは、参照として渡された EmployeeModel に含まれるもので初期化されます。

これは非常に基本的な実装であり、拡張性と保守性も考慮すべき要素であるほとんどの実際のアプリケーションでは、MVPまたはMVVM WinForms アーキテクチャ フレームワークが通常使用されます。

フォーム 1 デザイナー:

namespace FormToFormExample
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(12, 12);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(260, 20);
            this.textBox1.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(197, 64);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 2;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 100);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button1;
    }
}

フォーム 2 デザイナー:

namespace FormToFormExample
{
    partial class Form2
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(12, 9);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(35, 13);
            this.label1.TabIndex = 0;
            this.label1.Text = "label1";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(12, 34);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(35, 13);
            this.label2.TabIndex = 1;
            this.label2.Text = "label2";
            // 
            // Form2
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Name = "Form2";
            this.Text = "Form2";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
    }
}

モデルクラス:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FormToFormExample
{
    public class EmployeeModel
    {
        #region Properties
        private Guid _employeeID;
        public Guid EmployeeID
        {
            get { return this._employeeID; }
            set { this._employeeID = value; }
        }

        private string _name;
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        } 
        #endregion

        #region Constructors
        public EmployeeModel()
        {
            this._employeeID = Guid.NewGuid();
        }

        public EmployeeModel(string name)
            : this()
        {
            this._name = name;
        } 
        #endregion
    }
}

フォーム 1 ソース:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormToFormExample
{
    public partial class Form1 : Form
    {
        #region Constructors
        public Form1()
        {
            InitializeComponent();
            Initialize();
            BindComponents();
        } 
        #endregion

        #region Methods
        private void BindComponents()
        {
            this.button1.Click += button1_Click;
        }

        private void Initialize()
        {
            this.textBox1.Text = string.Empty;
        } 
        #endregion

        #region Events
        void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(new EmployeeModel(textBox1.Text));
            form2.ShowDialog();

            Initialize();
        } 
        #endregion
    }
}

フォーム 2 ソース:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormToFormExample
{
    public partial class Form2 : Form
    {
        EmployeeModel _model;

        #region Constructors
        public Form2()
        {
            InitializeComponent();
            BindComponents();
        }

        public Form2(EmployeeModel model)
            : this()
        {
            this._model = model;
        } 
        #endregion

        #region Methods
        private void BindComponents()
        {
            this.Load += Form2_Load;
        }

        private void Initialize()
        {
            this.label1.Text = this._model.EmployeeID.ToString();
            this.label2.Text = this._model.Name;
        } 
        #endregion

        #region Events
        void Form2_Load(object sender, EventArgs e)
        {
            Initialize();
        }  
        #endregion
    }
}

プログラム:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormToFormExample
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
于 2014-12-23T13:24:34.627 に答える