0

親フォームとダイアログがあります。親からダイアログに情報を渡す必要があります

ここに私が持っているものがあります:

private void Item_Click(object sender, EventArgs e)
{
  DialogResult result = DialogResult.OK;
  DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions();            
  _frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts;
  _frmDlgGraphOptions.ShowDialog(this);
  if (result == DialogResult.OK)
  {
    // Save the revised options to the Data Group
    theDGroup.m_SerOpts = _frmDlgGraphOptions.m_SerOpts;
  }

DlgGraphOptions(child/dialog) フォームで、初期化しました

public partial class DlgGraphOptions : Form
{
  public GraphOpts_t m_SerOpts = new GraphOpts_t();
}

private void InitSettings(int idxSeries)
{
  m_nMaxPts = m_SerOpts.GetMaxPts(idxSeries);
}

だから私は親からダイアログに theDGroup.m_SerOpts を渡す必要があるので、私はやった

_frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts;

親で。今、子で:

public GraphOpts_t m_SerOpts = new GraphOpts_t;

これは間違っているようです。私はそれを再初期化したくありません。

4

2 に答える 2

1

このようにコードを変更する必要があると思います:

まず、DlgGraphOptionsフォームで、DlgGraphOptions のコンストラクターを変更します。

// Force the caller to pass a GraphOpts_t 
// Check if it is a valid instance or create one as new
public partial class DlgGraphOptions(GraphOpts_t input ) : Form 
{ 
     m_SerOpts = (input == null ? new GraphOpts_t() : input);
}

次に、内部 GraphOpts を返すゲッターのみでパブリック プロパティを作成します。

public GraphOpts_t Options 
{ 
    get{ return m_SerOpts; }
}

次に、呼び出しフォームで、uour コードを変更します

// Pass the m_setOpts from theDGroup 
DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions(theDGroup.m_SerOpts);
if(DialogResult.OK == _frmDlgGraphOptions.ShowDialog(this))
{  
    // Save the revised (or new) options to theDGroup  
    theDGroup.m_SerOpts = _frmDlgGraphOptions.Options;  
}  

このアプローチでは、ダイアログのユーザーに初期化値または null を渡すよう強制します。ただし、InitSettings は初期化された値で機能し、オプション インスタンスを 2 回初期化していません。
(実際には、コードから大きな改善はありませんが、より良いアプローチだと思います)

于 2012-06-01T21:59:42.903 に答える
0

あなたの子クラスはおそらくm_SerOptsプロパティとして持つべきです:

public partial class DlgGraphOptions : Form
{
  public GraphOpts_t m_SerOpts { get; set; }
}

クリック イベントは、おそらく次のようにクリーンアップできます。

private void Item_Click(object sender, EventArgs e)
{
  using (DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions()) {
    _frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts;
    if (_frmDlgGraphOptions.ShowDialog(this) == DialogResult.OK)
    {
      // Save the revised options to the Data Group
      theDGroup.m_SerOpts = _frmDlgGraphOptions.m_SerOpts;
    }
  }
}

DlgGraphOptions フォームでは、またはボタン イベントでフォームのDialogResultプロパティを設定する必要があります。OKSave

コンストラクターを介して m_SerOpts オブジェクトを渡すこともできます。

public partial class DlgGraphOptions : Form
{
  public GraphOpts_t m_SerOpts { get; }

  public DlgGraphOptions(GraphOpts_t serOpts) {
    InitializeComponents();
    m_SerOpts = serOpts;
  }
}
于 2012-06-01T21:56:13.680 に答える