1

Windowsフォームアプリケーションに2つのユーザーコントロールがあります。最初のユーザーコントロールには、1つの「テキストボックス」と1つの「保存」ボタンがあります。
また、別のユーザーコントロールに「テキストボックス」があります。
最初のユーザーコントロールの[保存]ボタンをクリックすると、ユーザーコントロールの[テキストボックス]の値が何であれ、別のユーザーコントロールの[テキストボックス]に表示される必要があります。

私はこのように試しました

namespace project
{
    public partial class ucSample : UserControl
    {

    private double transferVolume;

    public double TransferVolume
    {
        get { return transferVolume; }
        set { transferVolume = value; }
    }

    public ucSample()
    {
        InitializeComponent();

    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        TransferVolume = double.Parse(txtSamplevolume.Text);
       }
    }
}

別のユーザーコントロールで、次のようなロジックを作成しようとしています。

namespace project
{
    public partial class ucSettings : UserControl
    {
         ucSample samplevolume = new ucSample();
         public ucSettings()
         {
             InitializeComponent();
         }

         private void  txtvolumeMin_TextChanged(object sender, EventArgs e)
         {
             txtvolumeMin.Text = samplevolume.TransferVolume.ToString();
         }
    }
}

私がここでどんな間違いをしているのか、誰か助けてくれませんか。プロパティを使用して値を転送しています。私はそれが何の間違いなのか理解できません。またはこれを行うための他の最良の方法。

4

1 に答える 1

1

コードが逆になっているようです。最初のコントロールのテキストボックスに名前が付けられていると仮定しfoo(そのコードが表示されないため)、ucSettingsフォーム上のコントロールのインスタンスに名前が付けられていると仮定しucSettingsInstanceます。

コントロール内ucSample

public event EventHandler TextChanged;

private void foo_TextChanged(object sender, EventArgs e)
{
    if (this.TextChanged != null) { this.TextChanged(sender, e); }
}

あなたのフォームでその新しいイベントを消費します:

private void ucSettingsInstance_TextChanged(object sender, EventArgs e)
{
    ucSettingsInstance.MinimumVolume = ucSampleInstance.TransferVolume;
}

ucSettings次に、新しいプロパティを次の場所に追加する必要があります。

public double MinimumVolume
{
    get { return minimumVolume; }
    set
    {
        minimumVolume = value;
        txtVolumnMin.Text = minimumVolume.ToString();
    }
}

これで、最初のコントロールで値が変更されたときに、2番目のコントロールで値を設定できます。

于 2013-02-21T13:03:41.283 に答える