2016-05-08 5 views
1

私はC#でWindowsアプリケーションを使用しており、スコアに基づいて3つのレベルにランク付けしたい。第1レベルで最もスコアの高いもの、第2レベルで次に高いもの、第3レベルで最も高いもの。Windowsアプリケーション:グループ内のListViewアイテムを行の中心に合わせる

3つのグループでListViewを使ってこれを実装しました。私の質問です:私は各グループの項目を中心に並べることはできますか?アイテムは、これはowner-drawingListViewなくて本当に可能ではないん

enter image description here

答えて

2

を左に整列しています。

理由はShowGroupsプロパティです。

ListViewItem lvi = listView1.Items[3]; 
lvi.Position = new Point(lvi.Position.X + 50, lvi.Position.Y); 
lvi.Text = "X testing X"; 

しかし、これはListView場合は効果がありません。ここで

それは偽だった場合は、各ListViewItemについてPositionを計算することができ..

ListViewItemの位置を変更する方法です残念ながらShowGroups = trueがあります。また、オフセットを単純なタスクとして計算することもありません。結局のところ、Itemsの数に応じて、グループ内および行内にはの両方が異なることになる。

したがって、ListViewをオーナーロドレスする必要があります。これは機能しますが、正確な位置を決定する際に同じ問題が発生します。

2つのアイテムをセンタリングすると、レイアウト全体がギザギザに見えて、醜いです。

おそらく最も簡単な解決策は回避策です。必要に応じてダミーアイテムを追加するだけです。その画像は透明またはそのImageIndex = -1;で、そのテキストは空白または空白になります。行の項目の最大値で割り切れない奇数の項目を持つすべてのグループに挿入します。 3.お使いの場合または、おそらくグループが一つだけのアイテムが含まれているかどうかをチェックするのに十分な..です

次に例を示します。

void InsertBlankItem(ListView lv, ListViewGroup lvg) 
{ 
    ListViewItem lvOld = g.Items[0]; 
    lvg.Items.Remove(lvOld); 
    ListViewItem lviBlank = new ListViewItem() { Text = " ", ImageIndex = -1 }; 
    lviBlank.Group = lvg; 
    listView1.Items.Add(lviBlank); 
    lvg.Items.Insert(1, lvOld); 
} 

これは空白の項目を追加し、最後に最初の項目に移動..:もちろん

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach (ListViewGroup g in listView1.Groups) 
    { 
     if (g.Items.Count == 1) InsertBlankItem(listView1, g); 

    } 
} 

あなたはグループ内のあなたItems再オーダー以上にしたい場合は、今あなたがListView ..

にクリック可能なダミーのアイテムを持っていますそれらをすべてリストに削除し、それらを新しい順序で再追加する必要があります。

enter image description hereenter image description here

関連する問題