2012-02-09 5 views
2

私は多くの設定ページを持つフォームを持っています。すべてのページが同じなので、私はむしろ単一のフォームを作成し、それから編集する予定の設定の名前を渡します。どうすればいい?フォームが「ConfigForm」と呼ばれていると言うことができます、私はこのような何かでそれを呼び出すことができるようにしたい:C#で他の変数文字列を使用して変数にアクセスしていますか? EVAL?

new ConfigForm("event1").Show(); 

シンプルな、これはConfigFormをプルアップ、および文字列「イベント1」を送信します。しかし、私が設定 "event1"を探していることを知って、どのように今この設定にアクセスできますか?通常の設定にアクセスするには、私はこのようなものを使用すると仮定します(イベント1がStringCollectionです)

string varName = Properties.Settings.Default.passedString[3]; 

は、どのように私はイベント1を変数「passedString」に格納されている場合、文字列内の「イベント1」を置けばいいの? PHPでは、私はEVALのようなものを使用します。 C#でどうやってやるの?

---- EDIT

前の答えは、 "設定" の問題を解決しました。根本的な質問には答えません。変数で渡された文字列を変数識別子としてどのように使用しますか?私は...それに格納されているテキスト「イベント1」と「passedString」と呼ばれる文字列を、持っていたのであればどのように私はそれを変換することになるだろう:

this.event1.Text = "test"; 

this.(passedString).Text = "test"; 

+0

私はWinFormsを推測していますか? –

+0

はい、Windowsフォームです。 –

答えて

1

Default継承:

Object this[ 
    string propertyName 
] { get; set; } 

だからあなたは[]を使用することができます。あなたはStringCollecitonを更新したい場合は、この方法、それへの参照を取得することができます

以下
((StringCollection)Properties.Settings.Default[passedSetting])[3] 

ようStringCollectionクラスにキャストすることを忘れないでください:

StringCollection collection = (StringCollection)Properties.Settings.Default[passedSetting]; 
collection.Add("another value"); 
collection[3] = "replace"; 
Properties.Settings.Default[passedSetting] = collection; // We'd rather call the setter. 
+0

それはデータを取得するときに私が探しているものとほとんど同じです...データを設定することはできますか? –

+0

答えは – evpo

+0

です。これは設定のために機能します...しかし、これを他のフォームアイテムでどうすればできますか?たとえば、 "this。(passedSetting).Text"を編集する場合はどうしますか?何らかのエバールがなければ、これはどのように可能でしょうか? –

0

はでコンストラクタを定義します。引数を渡したいフォーム。次のプロパティがありSettingsBaseから

public class MyForm : Form 
{ 
    protected readonly string setting; 

    public MyForm(string setting) 
    { 
     this.setting = setting; 
    } 
} 


// to open 
(new MyForm("event1")).Show(); 
+0

あなたは質問の後半を欠席しました。 'Properties.Settings.Default [setting] = someControl.Text'のように見えるかもしれません。 –

+1

正直言って私は質問の後半を理解していません。 – Matthew

+0

それは私の質問に答えることはできません...私は "event1"という設定にアクセスする必要がありますが、コード内にevent1を明示的に定義する必要はありません。代わりに "event1"が文字列で渡されます。 –

0

/設定を設定して取得するには文字列キーを使用してSettings.Disault.isis []インデクサを使用します。

this.Controls["button1"].Text = "someText"; 

// or 
this.Controls.Find("button1", true).First().Text = "someText"; 

そしてそれは、フォームの任意のプロパティまたは任意の他のオブジェクトになる場合Uは、独自の特別なを使用することができます:/この単純な技術を使用することができ、フォームの使用中にコントロールのプロパティを設定し取得するために

セッターまたは最後にreflection

しかし、このような単純な状況でリフレクションを使用しないでください。

+0

.First()は機能しませんでしたが、[0]しました。ありがとう。 –

+0

First()はLINQ拡張であるため、この拡張機能(および.NET> = 3.5)にアクセスするためにSystem.Linqを使用する必要があります。 –

関連する問題