重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつも大変勉強にさせてもらってます。

C#・・というかプログラミング初心者です。
勉強はとにかくしているんですが、躓いてばかりです・・。

多分基本的なことだとは思うんですが、調べても、本を読んでもわからなかったので、ご教授願います。

public void Set_ComboBox(string ColumnNo, string ColumnName, object CmbName)
{
System.Windows.Forms.ComboBox Cmb_WK;
Cmb_WK = (System.Windows.Forms.ComboBox)CmbName;

Cmb_WK.DataSource = this.M_KIJITableAdapter.GetDataById_Hinmei().Copy();
Cmb_WK.DisplayMember = "sname";
Cmb_WK.ValueMember = "id";
string sname = Cmb_WK.SelectedValue.ToString();

string id = Cmb_WK.GetItemText(Cmb_WK.SelectedValue).ToString();
}

private void KijiCmbBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("商品名" + sname + "ID" + id);
}

上のコンストラクタで作った sname と id を下のコンストラクタで使いたいのですが、publicだからそのまま書いても使えるかと思ったんですけど、エラーになります。

さらに以下のようにソースを付け足してみたのですが、System.StackOverflowExceptionがでてしまい困っています。
public string sname{
get { return sname; }
set { sname = value; }
}

public string id
{
get { return id; }
set { id = value; }
}

そもそもコンテキストが違うとアクセスできないということでしょうか?
ご存知の方、よろしければ教えてください。

A 回答 (1件)

コンストラクタなどのメソッド内で定義した『ローカル変数』は外部からアクセスは出来ません



プロパティを実装するのであればその内容を保持する変数を別途準備しましょう

private string sNameObject;
private string sIDObject;
といった具合に準備して

public string sname{
  get { return sNameObject; }
  set { sNameObject = value; }
}

public string id
{
  get { return sIDObject; }
  set { sIDObject = value; }
}
といった具合に実装します

コンストラクタ内でこれらの設定をするのであれば
public void Set_ComboBox(string ColumnNo, string ColumnName, object CmbName)
{
  System.Windows.Forms.ComboBox Cmb_WK;
Cmb_WK = (System.Windows.Forms.ComboBox)CmbName;

  Cmb_WK.DataSource = this.M_KIJITableAdapter.GetDataById_Hinmei().Copy();
  Cmb_WK.DisplayMember = "sname";
  Cmb_WK.ValueMember = "id";
  // string sname = Cmb_WK.SelectedValue.ToString();
  this.sname = Cmb_WK.SelectedValue.ToString();

  // string id = Cmb_WK.GetItemText(Cmb_WK.SelectedValue).ToString();
  this.id = Cmb_WK.GetItemText(Cmb_WK.SelectedValue).ToString();
}
といった具合にします
private void KijiCmbBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("商品名" + sname + "ID" + id);
}
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございました。

解決できました。

お礼日時:2009/05/07 16:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!