私はウィンドウフォームを持っています。ユーザーがチェックボックスを選択しないと、新しいフォームが後で[次へ]を押したときに開きますが、選択した場合は同じフォームが使用されます。
チェックボックスを選択した場合、現在のフォームのクローンを(同じ変数とコントロール値で)表示します。チェックボックスをオフにしないで値を変更し、もう一度[次へ]を押して別の値を入力することができます手動で
Form duplicate = this;
は同じフォームを参照するだけで、new(this)
というようなものはありません。
私のフォームは、以前のフォームからコンストラクタを取得するので、Form duplicate = new Form() = this
を試すことができませんでした
これを行う方法を知っている人はいますか?事前に感謝しますC言語でコントロールと変数の状態をフォームから別のフォームにコピーします。
答えて
あなたは、フォーム内のこれらのメソッドを追加することができます。
public void RestoreState(Dictionary<string, object> controlStates,
Dictionary<string, object> membersStates)
{
InternalRestoreControls(controlStates);
InternalRestoreMembers(membersStates);
}
private void InternalRestoreControls(Dictionary<string, object> states)
{
foreach (var state in states)
{
Control c = this.Controls.Find(state.Key, true).FirstOrDefault();
if (c is TextBox)
{
(c as TextBox).Text = state.Value == null ? null : state.Value.ToString();
}
else if (c is CheckBox)
{
(c as CheckBox).Checked = Convert.ToBoolean(state.Value);
}
}
}
private void InternalRestoreMembers(Dictionary<string, object> membersStates)
{
// you might need to tweek this a little bit based on public/instance/static/private
// but this is not the point of your question
BindingFlags flags = BindingFlags.Instance | BindingFlags.Static
| BindingFlags.Public | BindingFlags.NonPublic;
var props = this.GetType().GetProperties(flags);
var fields = this.GetType().GetFields(flags);
foreach(var variable in membersStates)
{
var prop = props.FirstOrDefault(x => x.Name == variable.Key);
if(prop != null)
{
prop.SetValue(this, variable.Value);
continue;
}
var field = fields.FirstOrDefault(x => x.Name == variable.Key);
if(field != null)
{
field.SetValue(this, variable.Value);
continue;
}
}
}
private Dictionary<string, object> GetControlsState()
{
return new Dictionary<string, object>()
{
{ txtBox1.Name, txtBox1.Text },
// continue to the rest
};
}
private Dictionary<string, object> GetMembersState()
{
return new Dictionary<string, object>()
{
{ nameof(variable1), variable1 },
// continue to the rest
};
}
Uセージ:
Form duplicate = new Form();
duplicate.RestoreState(this.GetControlsState(), this.GetMembersState());
ここに私は何をしますか: "クローン"をボタンで開こうとふりましょう。
public Form1()
{
InitializeComponent();
}
public Form1(string YourValue, int AnotherValue) //This basically works like a constructor when the form is called
{
InitializeComponent();
ValueLabel1.Text = YourValue;
ValueLabel2.Text = Convert.ToString(AnotherValue);
}
private void DuplicateButton_Click(object sender, EventArgs e)
{
int a = 3;
Form1 Window = new Form1(TextBox1.Text, a);
Window.Show;
}
私はあなたが
15個のテキストボックスのようなものがあります。すでに別の目的のためにコンストラクタを持っています –
もう少し複雑ですが、 'TextBox1'''TextBox2'などのプロパティでオブジェクトをコードすることができますそれらに価値を与えてください。その後、xmlとして保存し、showを使用してフォームを再度呼び出すと、xmlファイルを読み込み、各TextBoxの値を割り当てます。 – Shmosi
あなたがキーと値として制御値として制御名と辞書を使用して、オプションのパラメータ
public form1(string para1, int para2, Dictionary<string,object>yourDic=null)
{
}
としてそれを渡すことができ、この作品を願って:クローニングする形で
手動で辞書を作成しますか? –
はいコントロール名とテキストまたはboolのような値を辞書に保存します。フォームをロードすると、辞書がnullかどうかを確認できます。ヌルでない場合は、 。 – Johannes
- 1. 私のデータベースクラスからのフォームをC言語のフォームに戻す#
- 2. MVC3:C#フォーム認証とセッション状態
- 3. Qtのあるフォームから別のフォームに変数を渡す
- 4. フォームから状態パターンへのリファクタリング?
- 5. パブリック変数をあるフォームから別のフォームにコピーできないのはなぜですか?
- 6. 別のフォームから1つのフォームのコントロールを参照する
- 7. どのプログラミング言語が言語レベルの状態をサポートしていますか?
- 8. あるフォームから別のフォームのtextBoxChangedイベントハンドラに変数を渡す方法はありますか?フォーム1で
- 9. 別のフォームからのアクセス変数
- 10. #defineをC言語でスイッチの状態で使用する
- 11. 言語が変更されたときにフォームのサイズを変更します。
- 12. C言語でBLOBをあるAzureストレージアカウントから別のアカウントにコピーする
- 13. ReportViewer言語の変更ツールバーWindowsフォーム
- 14. C#子フォーム親フォームからコントロールを継承する
- 15. C#を使用してフォームから別のフォームにデータをコピーする方法は?
- 16. jQueryのフォームからフォームへのコピー
- 17. C#の1つのフォームからvb.netの別のフォームにリダイレクト
- 18. フォームリッチテキストボックスから別のフォーム上の別のフォームにテキストを移動するC#
- 19. テキストプロパティまたはコントロールのプロパティを別のフォームから変更する
- 20. C#:フォームからドラッグする方法とコントロールですか?
- 21. フォームからメインアプリケーションに状態を渡す - 反応するJS
- 22. javascript変数を別のページのフォームに挿入しますか?
- 23. Drupalの多言語フォーム8
- 24. フォーム6iの多言語サポート
- 25. ASP.NETで5秒後にフォームとページの状態をリセットする
- 26. Kivy - kv言語以外の関数からボタンの状態を変更できません
- 27. エラーメッセージC言語での変数宣言
- 28. C言語の変数と関数
- 29. 別のクラスからフォームにコントロールを追加する
- 30. フォームのコピーをコントロールの値と共に提出する方法
クローンする必要がある多くの状態変数がありますか?フォーム全体の階層構造(コントロールと子どもたちとイベントはすべて途中で)をクローンすることは私にとって大きな混乱のように思えます。私はそれをしないことをお勧めします。状態のクローンを作成する5〜10個のコントロールがある場合は、これらの特定のコントロール用のメソッドを使用することをお勧めします。 – user3185569
どのメソッドクローンがその値で制御するのですか(私は '.text'値のみをコピーしたい) –
そして、例えば' CheckBoxes'がチェックされていますか? – user3185569