C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: listView1.Items.Add を別クラスで


(過去ログ 59 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■33697 / inTopicNo.1)  listView1.Items.Add を別クラスで
  
□投稿者/ Ao (1回)-(2009/03/07(Sat) 14:51:54)

分類:[.NET 全般] 

ListViewにアイテムを追加する件で質問です。
プロジェクトを新規作成するとForm1クラスが作成されますが、他のクラス内でListViewに追加処理する記述をして、
それをForm1内で呼ぶといった処理をしてもListViewに登録してくれませんが、このような使い方は不可ですか?
現在、タイムスタンプを更新するアプリを作っているのですが、OpenFileDialogからファイルを10000個など呼び込むと、
文字列のバッファオーバーになるので、Win32APIのGetOpenFileNameを使ってダイアログを表示させることにしましたが、
別クラスにて記述しており、最終的にダイアログからファイル名を取得してそこで、ListViewに登録する記述をして。。
のような流れになっておりどうしようか悩んでます。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=161&KLOG=1
の  C#に首ったけ さんの ■175 / inTopicNo.12 内のソースを
かなり参考にさせていただいてます。

環境
WinXP Pro SP2
VS.net 2005 C#

namespace listview_test_project
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
other_class test = new other_class();
test.add();
}
}
public class other_class
{
public void add()
{
Form1 frm1 = new Form1();
string[] a = {"aaa","bbb"};
frm1.listView1.Items.Add(new ListViewItem(a));
}
}
}

引用返信 編集キー/
■33698 / inTopicNo.2)  Re[1]: listView1.Items.Add を別クラスで
□投稿者/ Azulean (314回)-(2009/03/07(Sat) 15:20:04)
>         public void add()
>         {
>             Form1 frm1 = new Form1();
>             string[] a = {"aaa","bbb"};
>             frm1.listView1.Items.Add(new ListViewItem(a));
>         }
addメソッドを呼ぶ度に別のForm1が作られて、そこのlistView1にアイテムが追加されています。
この作られたForm1は画面に表示されていないので分かりにくいのでしょうけれども。。。

addメソッドを呼ぶ際の引数にthisを渡して、addメソッド側の引数としてForm1のインスタンスを取れるようにしましょう。

引用返信 編集キー/
■33720 / inTopicNo.3)  Re[2]: listView1.Items.Add を別クラスで
□投稿者/ Ao (2回)-(2009/03/08(Sun) 02:26:41)
No33698 (Azulean さん) に返信
> >         public void add()
>>        {
>>            Form1 frm1 = new Form1();
>>            string[] a = {"aaa","bbb"};
>>            frm1.listView1.Items.Add(new ListViewItem(a));
>>        }
> addメソッドを呼ぶ度に別のForm1が作られて、そこのlistView1にアイテムが追加されています。
> この作られたForm1は画面に表示されていないので分かりにくいのでしょうけれども。。。
> 
> addメソッドを呼ぶ際の引数にthisを渡して、addメソッド側の引数としてForm1のインスタンスを取れるようにしましょう。

変更した以下のプログラムで正常にlistviewにアイテムを追加させることができました。
このたびはどうもありがとうございました。!!

namespace test_listview
{
    public partial class Form1 : Form
    {
        private other_class oc;  //追加
        public Form1()
        {
            InitializeComponent();
        }
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.oc = new other_class(this);  //変更
            this.oc.add();   //変更
        }
    }
    public class other_class
    {     
        private Form1 form1;     // Form1のインスタンス追加     
        public other_class(Form1 form1)   // コンストラクタ追加
        {
            this.form1 = form1;
        }
        public void add()
        {
            //Form1 form1 = new Form1();  コメントアウト
            string[] a = { "aaa", "bbb" };
            form1.listView1.Items.Add(new ListViewItem(a)); 
        }
    }
}

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -