6

サブアイテムが機能するリストビューの最も単純な例を取得しようとしています。しかし、このコード:

private void button1_Click(object sender, EventArgs e) {
    listView1.Groups.Add(new ListViewGroup("Kannst du mich sehen?", HorizontalAlignment.Left));
    string[] strArr = new string[4] { "uno", "dos", "twa", "quad" };
    for (int i = 0; i < strArr.Length; i++)
    {
        ListViewItem lvi = new ListViewItem(strArr[i]);
        listView1.Items.Add(lvi);
        lvi.SubItems.Add("Ciao, Baby!");
        listView1.Items[i].Group = listView1.Groups[0];
    }
}

...サブ項目 (「チャオ、ベイビー!」) を表示しません。それが示している:

Kannst du mich sehen?
---------------------
uno   dos   twa   quad

...しかし、私はそれをしたい:

Kannst du mich sehen?
---------------------
uno Ciao, Baby!
dos Ciao, Baby!
twa Ciao, Baby!
quad    Ciao, Baby!

さらに奇妙なことに(私には思えますが)、私はこれを取得します:

Default
-------
uno dos twa quad    uno dos twa quad

FIRST
-----
uno dos twa quad

...このコードで:

private void button2_Click(object sender, EventArgs e) {
    string[] strArrGroups = new string[3] { "FIRST", "SECOND", "THIRD" };
    string[] strArrItems = new string[4] { "uno", "dos", "twa", "quad" };
    for (int i = 0; i < strArrGroups.Length; i++)
    {
        listView1.Groups.Add(new ListViewGroup(strArrGroups[i], HorizontalAlignment.Left));
        for (int j = 0; j < strArrItems.Length; j++) {
            ListViewItem lvi = new ListViewItem(strArrItems[j]);
            listView1.Items.Add(lvi);
            lvi.SubItems.Add("Hasta la Vista, Mon Cherri!");
            listView1.Items[j].Group = listView1.Groups[i];
        }
    }
}

アップデート

あなたが私に尋ねると、ListViewのViewプロパティは少しゴンゾとして機能します:

デフォルトの " LargeIcon " 設定は、最初に表示されたとおりに機能します (SmallIcon も同じ効果があります)。「Detail」はグループヘッダーのみを提供します(アイテムなし)「List」はアイテムを提供します(必要に応じて1行に1つ)が、グループ/ヘッダー「Tile」は提供しません:

Kannst du mich sehen?
---------------------
uno     dos
twa     quad

...button1 のコードと:

Default
---------------------
uno     dos
twa     quad
uno     dos
twa     quad

FIRST
---------------------
uno     dos
twa     quad

...button2 のコードで

また:

1) I'm stupid
2) ListView is very counterintuitive
-or
3) Nobody ever wants to use the ListView the way I'm trying to use it...if that's the case, should I be using a different control instead?

~~~ サイド (またはボトム) の質問: 私は StackOverflow に住んでいるので、二重市民になることは可能ですか? そうすることで税制上の利点はありますか?

4

3 に答える 3

3

これは私のために働く:

listView1.Columns.Add("Col1");
listView1.Columns.Add("Col2");

string[] strArrGroups = new string[3] { "FIRST", "SECOND", "THIRD" };
string[] strArrItems = new string[4] { "uno", "dos", "twa", "quad" };
for (int i = 0; i < strArrGroups.Length; i++)
{
    int groupIndex = listView1.Groups.Add(new ListViewGroup(strArrGroups[i], HorizontalAlignment.Left));
    for (int j = 0; j < strArrItems.Length; j++)
    {
        ListViewItem lvi = new ListViewItem(strArrItems[j]);
        lvi.SubItems.Add("Hasta la Vista, Mon Cherri!");
        listView1.Items.Add(lvi);
        listView1.Groups[i].Items.Add(lvi);
    }
} 

他の質問に示されているように、アイテムにグループ プロパティを設定するのではなく、アイテムをグループに追加する必要があることがわかりました。とても、とても奇妙です。

結果は次のとおりです。

ここに画像の説明を入力

.Net 4、WinForms、VS2010 でテスト済み

于 2012-07-11T00:28:59.277 に答える
3

の別の列を追加する必要がありますSubItem。あなたsubitemが表示されていないのは、その列がないためです。これを試してみてください。

listView1.Columns.Add("Column 1"); // you can change the column name
listView1.Columns.Add("Column 2");
string[] strArr = new string[4] { "uno", "dos", "twa", "quad" };
foreach (string x in strArr)
{
    ListViewItem lvi = listView1.Items.Add(x);
    lvi.SubItems.Add("Ciao, Baby!");
}
于 2012-07-10T23:47:15.123 に答える
2

サブアイテムを追加した後にアイテムを追加してみてください:

ListViewItem lvi = new ListViewItem(strArr[i]);
lvi.SubItems.Add("Ciao, Baby!");
listView1.Items.Add(lvi);    
listView1.Items[i].Group = listView1.Groups[0];

お役に立てれば!

于 2012-07-10T23:39:46.050 に答える