MS Visual Studioで簡単なC#パスワードセーバーユーティリティを作成しようとしています。formAにlistViewがあり、formBを使用して新しいアイテムをリストに追加したいと思います。
FormBは、formAのメンバーであるforceAddを呼び出します。次に、forceAddはデータ・セットを更新し、populateList()を呼び出してlistViewの更新を試みます。
問題は、formAのボタンまたはチェックボックスでpopulateList()関数を呼び出すまで、listViewが変更を反映しないことです。
たとえば、コード内でpopulateList()を50回呼び出しても無駄になりますが、formAのボタンから呼び出すとすぐに機能します。
(DieselPass = fromA、newForm = FormB、newForm :: Save呼び出しforceAdd、formA :: newはnewFormを開きます)
(formA :: Edit ...ボタンを上に配線してデータを入力し、保存後にクリックすると、listViewが更新されます)
私は新しいユーザーです...この画像はそれを説明しています:http: //i50.tinypic.com/wk6bys.jpg
public void forceAdd(String a, String u, String p)
{
accountsDataSet.tblAccounts.AddtblAccountsRow(a, u, p);
tblAccountsTableAdapter.Update(accountsDataSet.tblAccounts);
populateList();
}
private void populateList()
{
//make sure data set is up to date
this.tblAccountsTableAdapter.Fill(this.accountsDataSet.tblAccounts);
//clear existing items
listView1.Items.Clear();
for (int i = 0; i < accountsDataSet.tblAccounts.Count; i++)
{
String[] wtf;
if (maskPasswords)
wtf = new string[] { accountsDataSet.tblAccounts[i].Account, accountsDataSet.tblAccounts[i].Username };
else
wtf = new string[] { accountsDataSet.tblAccounts[i].Account, accountsDataSet.tblAccounts[i].Username, accountsDataSet.tblAccounts[i].Password };
lvi = new ListViewItem(wtf);
Console.WriteLine(lvi.ToString());
listView1.Items.Add(lvi);
}
}
私がすでに試したことは次のとおりです。
listView1.Update();
listView1.BeginUpdate();
...
listView1.EndUpdate();
listView1.Refresh();
listView1.Clear();
listView1.RedrawItems(0,i,t/f);
this.Update();
this.Refresh();
どんな助けやヒントも大歓迎です、ありがとう。
その他のコード:
FormAはformBで参照を設定します:
myNewForm.getForm = this;
FormBのformAへの参照:
private mainForm myForm = new mainForm();
public mainForm getForm
{
get { return myForm; }
set { myForm = value; }
}
FormAの関数を呼び出すFormB:
myForm.forceAdd(accountBox.Text.ToString(), usernameBox.Text.ToString(), passwordBox.Text.ToString());
これは、「呼び出し/委任」を実行する必要があるインスタンスですか?
編集2:
申し訳ありませんが、FormBが呼び出しますFormA::populateList()
。これを確認するために、コンソール出力を関数に入れました。データセットに項目が正常に追加されましたが、リストが更新されません。これは、それをリフレッシュさせない外部フォームであることを知っているようなものです。
また、populateListを公開しましたが、機能しませんでした
Visual Studioは、落ち着いた後でも電話pupulateList()
を(mainForm)this.Parent.
かけられmyNewForm.ShowDialog(this);
ません。何かを含めるか、別の方法で渡す必要がありますか?
リストを更新するだけでなく、作品を通してformAへの私の参照myForm
..?
編集3:これも機能しません:
((mainForm)this.Parent).populateList();