0

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();
4

1 に答える 1

0

FormBには、FormAのインスタンスへの参照が必要です。挿入ボタンがクリックされたときに、この参照をFormBに渡すことができます。

FormAで

FormB PWDForm= new FormB();
FormB.ShowDialog(this);

次にFormBで、次のようにFormAにアクセスできます。

(FormA)this.Parent.populateList();
于 2012-08-17T22:22:14.913 に答える