2012-07-03 14 views
11

listViewwindowsFormで使用する方法を学習していますが、ここで解決したいと思っている問題がいくつかあります。私はプログラムを実行すると、列の名前が表示されていない、彼らはすべての左隅にあるlistViewで列を作成して項目を追加する

private void initListView() 
    { 
     // Add columns 
     lvRegAnimals.Columns.Add("Id", -3,HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Name", -3, HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Age", -3, HorizontalAlignment.Left); 
    } 

:まず最初に、私は以下のコードで列を作成していたときにです私はテキストを読むことができるようにそれらを「ドラッグ」しなければなりません。私は何を間違えたのですか?

最後に、どのように項目を列に追加するのだろうか。

ListViewItem item1 = new ListViewItem(???); 
item1.SubItems.Add("text"); 

各listViewItemオブジェクトは、列または行ですか?どのように情報の行を追加するのですか?いくつかの助けを正当化する!ありがとう!

答えて

31

最初の問題は、-3をColumns.Addの2番目のパラメータに渡していることです。列のサイズを自動的に変更するには、-2にする必要があります。出典:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx(下部のコード例のコメントを見て)

private void initListView() 
{ 
    // Add columns 
    lvRegAnimals.Columns.Add("Id", -2,HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 
} 

あなたはまた、(文字列)を追加し、他のオーバーロードを使用することができます。例えば:より多くのオーバーロードのための

lvRegAnimals.Columns.Add("Id"); 
lvRegAnimals.Columns.Add("Name"); 
lvRegAnimals.Columns.Add("Age"); 

参考:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection.aspx

第二に、リストビューに項目を追加するために、あなたはのListViewItemのインスタンスを作成し、リストビューのItemsコレクションに追加する必要があります。文字列[]コンストラクタを使用する必要があります。

var item1 = new ListViewItem(new[] {"id123", "Tom", "24"}); 
var item2 = new ListViewItem(new[] {person.Id, person.Name, person.Age}); 
lvRegAnimals.Items.Add(item1); 
lvRegAnimals.Items.Add(item2); 

アイテムのタグプロパティにオブジェクトを格納することもできます。

item2.Tag = person; 

そして、あなたはどんな質問を持っていると私はこのことができます願っていた場合、私に教えてください

var person = item2.Tag as Person; 

それを抽出することができます!

+0

助けてくれてありがとう!私は後で明日このコードを試してみるつもりです。おそらく私はそれについていくつかの質問がある場合、私はあなたに戻ることができます。 –

+0

暗黙的に型指定された文字列配列のオーバーロードコンストラクタはありませんか? – Charlie

+1

@Charlie、私はListViewItemのオーバーロードコンストラクタを指していると仮定していますか?コンストラクタからSubItemsを使用してListViewItemを作成する場合は、string [] overloadまたはListViewSubItem [] overloadを使用できます。私は新しい文字列[]の代わりに新しい[]を使用しています。これはC#が自動的に型(この場合は文字列)を推測できるからです。 https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewitem(v=vs.110).aspx – Tom

24

誰かがこれに正しく答えるのを見たことがありませんでした。だから私はここにそれを掲示している。列を表示するには、次の行を指定する必要があります。

lvRegAnimals.View = View.Details; 

次に、その後に列を追加します。

lvRegAnimals.Columns.Add("Id", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 

これは、今後この回答を探している人に役立ちます。

+3

これは正しい答えです – lzt

3

あなたがコントロールのプロパティを設定する必要があります。

listView1.View = View.Details; 
+0

このプロパティは何ですか>/ –

+0

*このプロパティは何ですか* ListViewは標準の「Windowsエクスプローラ」で使用されるため、標準のフォルダ/ファイルブラウザの**詳細ビュー**を想像してください。 –

+0

グリッド構造を表示します。 Pls。自分で試してみてください。 –

0
  listView1.View = View.Details; 
     listView1.Columns.Add("Target No.", 83, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Range ", 100, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Azimuth ", 100, HorizontalAlignment.Center);  

私も同じ問題を抱えていた..私はそうのは、私は283 * 196を持っているとしましょう..左が、今OKに列をドラッグしてlistviewの大きさ.....自動幅の場合、列幅-2で宣言しました。listviewでフィッティングする場合、リストビューの幅を3つの部分(83,100,100)に分割できます。

+0

コードを投稿するだけではなく、説明を追加する必要があります。 – reformed

関連する問題