2

私は2つのフォームを設定しました。1つはデータグリッドビューをロードし、ユーザーはビューをクリックして必要な値を選択します。datagridview と同じフォームのメッセージボックス内に表示される値を取得できますが、それを別のフォームに渡そうとすると、NULL が表示されます。テキストボックス内に表示するにはどうすればよいですか。これが私のコードです。コードをデバッグすると、最初に値が正しく渡されますが、実行が終了すると null 値として表示されます。私はこれを行うためのさまざまな方法を試しましたが、さまざまなクラスでもパブリック変数を使用してそれを実行しようとしました。

TextBox でフォーム 1

 public void FillTextBoxes(object sender, EventArgs e, string SupplierID)
    {
        supplierVO _SupplierVo = new supplierVO();
        ListOfSuppliers _ListOfSuppliers = new ListOfSuppliers();
        SupplierID = _ListOfSuppliers.SupplierCode;                                   
        MessageBox.Show(SupplierID);
        txtSupplierCode.Text = SupplierID;         
    }

Form2 と dataGridView

       // Links to the user double click of the datagrid
    public void SelectGridInformation (object sender, EventArgs e)
    {   
        ChangeSupplierInfo _ChangeSupplerInfo = new ChangeSupplierInfo();

        supplierVO _SupplierVO = new supplierVO();

        Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);

        string SelectedSupplierID = dataGridView1.SelectedCells[0].Value.ToString();

        SupplierCode = SelectedSupplierID;

        _SupplierVO.SupplierCode = SelectedSupplierID;

        _ChangeSupplerInfo.FillTextBoxes(sender, e, SelectedSupplierID);

        this.Close();
    }

Get および Set Property を使用してこれを実行しようとしましたが、これのコード サンプルは次のとおりです。

 public string SupplierCode
    {
        get
        {
            return _SupplierCode;
        }
        set
        {
            _SupplierCode = value;
        }
    }
4

4 に答える 4

2

同じことを考えているかどうかはわかりませんが、これを確認してください。Form1 は DataGridView で、Form2 は TextBox です。

それでは、Form1 内に Form2 を作成しましょう...

Form2 form2 = new Form2();
form2.show();

...そして、DataGridView の選択されたセルを取得します

form2.value = getDataGridValue();

次に、ユーザーが選択した値を渡す Form2 内でプロパティを宣言しましょう。

private string _value;

public string value
{
    get { return _value; }
    set
    {
      _value = value;
      OnPropertyChanged(_value);
    }
}

INotifyPropertyChanged を使用していることに注意してください。この宣言を Form2 内に含めます。

public partial class Form2 : Form, INotifyPropertyChanged

公開イベントを作成する

public event PropertyChangedEventHandler PropertyChanged;

そして、ユーザーが DataGridView で何かをクリックするたびにそれを上げます

protected void OnPropertyChanged(string value)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(value));
        }
    }

次に、 Form2Load で新しいイベントをサブスクライブします

private void Form2_Load(object sender, EventArgs e)
{
   PropertyChanged += new PropertyChangedEventHandler(Form2_PropertyChanged);
}

そして、物事を行います

void Form2_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
   this.InvokeIfRequired((value) => textBox1.Text = value, e.PropertyName);
}

Form1のDataGridViewで値を選択し、Form2のTextBox内でこの値を取得していますが、私が言ったように、同じことを考えているかどうかはわかりません...

于 2012-12-20T17:08:35.903 に答える
1

Form2 に文字列の SupplierID のみが必要な場合は、Form2 に SupplierID の変数を作成します。

private String supplierID;

このデータの目的に依存しない この変数のプロパティを作成する

次に、Form2 の新しいカスタム コンストラクターを作成します。

public void Form2(String supplierid)
{
    this.supplierID = supplierid;
}

Form1 で Form2 のインスタンスを作成するときは、カスタム コンストラクターを使用するだけです

//somwhere in Form1
Form2 frm2 = New Form2(SelectedSupllierID)
frm2.ShowDialog() //…
于 2012-12-21T13:37:07.917 に答える
0

このコードの次の行が問題です。

public void FillTextBoxes(object sender, EventArgs e, string SupplierID)
{
    supplierVO _SupplierVo = new supplierVO();
    ListOfSuppliers _ListOfSuppliers = new ListOfSuppliers();
    SupplierID = _ListOfSuppliers.SupplierCode;   //This line is the problem.                                
    MessageBox.Show(SupplierID);
    txtSupplierCode.Text = SupplierID;         
}

メソッドのパラメーターから SupplierID を取得しています。SupplierID を空の値で更新するのはなぜですか。ListOfSuppliers の新しいオブジェクトを作成すると、そのクラスの SupplierCode は空になり、空の値が SupplierID に割り当てられます。

また、変数 _ListOfSuppliers の目的がわかりませんか???

于 2012-12-20T15:01:40.690 に答える
0

何らかの理由でstringフォームを作成して渡すことができませんNew Instance

これを試してみてください..Form1このコードでForm2を表示しようとしています。

 using (var f = new Form2
                        {
                            Owner = this
                        }) f.ShowDialog();

その後、Form2イベントでは、このようにする必要があります

    Form1 f0 = this.Owner as Form1; //_ChangeSupplerInfo 

    supplierVO _SupplierVO = new supplierVO();

    Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);

    string SelectedSupplierID = dataGridView1.SelectedCells[0].Value.ToString();

    //SupplierCode = SelectedSupplierID;

    //_SupplierVO.SupplierCode = SelectedSupplierID;

    f0.FillTextBoxes(SelectedSupplierID);

    this.Close();

そしてからForm1

 public void FillTextBoxes(string SupplierID)
    {
        supplierVO _SupplierVo = new supplierVO();
        ListOfSuppliers _ListOfSuppliers = new ListOfSuppliers();
        //SupplierID = _ListOfSuppliers.SupplierCode;                                   
        MessageBox.Show(SupplierID);
        txtSupplierCode.Text = SupplierID;         
    }
于 2012-12-20T16:24:01.013 に答える