2010-12-07 10 views
1

View = View.Listで使用していたSystem.Windows.Forms.ListViewコントロールがあります。私が追加していたListViewItemsには、テキストとアイコンだけのサブアイテムはありませんでした。これはうまくいった。しかし、実行時にViewをView.Detailsに変更できるようにしたかったのです。そこで、ListViewコントロールに列を追加し、ListViewItemsにサブアイテムを追加し、ユーザーがビューを変更できるようにするボタンを追加しました。詳細ビューはうまく見えますが、リストモードでは、ListViewItemのテキストは最初の文字に切り捨てられ、省略記号が付いています。たとえば、ListViewItemのテキストが「stackoverflow」の場合、「s ...」と表示されます。ユーザーはアイテムのサイズを変更できません。 View.Listモードで、ListViewItemsの列とサブアイテムを追加する前と同じように、ListViewItemのテキストが表示されるようにするにはどうすればよいですか?WinForms ListView:列があり、View.List表示モードのときにListViewItemの幅を指定する方法は?

+0

あなたは 'Control.DefaultPadding'プロパティを設定しようとしたことがありますか? http://msdn.microsoft.com/en-us/library/system.windows.forms.control.defaultpadding.aspx –

答えて

3

私はそれを見ます。列の幅を広げて、その効果を確認します。ネイティブのWindowsコントロールは、リストモードであってもヘッダコントロールが作成されるのを見ることで紛らわしくなります。列幅を広げてしまうことを短くすれば、唯一実際の回避策は列を削除してから、View = Listに戻ることです。ヘッダーコントロールにいくつかの副作用があるかもしれないという後者のアプローチをお勧めします。

private void button1_Click(object sender, EventArgs e) { 
     if (listView1.View == View.List) { 
      listView1.View = View.Details; 
      listView1.Columns.Add(new ColumnHeader()); 
     } 
     else { 
      listView1.Columns.Clear(); 
      listView1.View = View.List; 
     } 
    } 
+0

View.Listに切り替える前に列を削除すると機能しませんでした。アイテムの幅は同じままです。最初のView、btwはView.Listです。現時点で実現可能と思われる回避策は、列を非常に高い幅に設定し、View.Detailsに表示されるときに列がより管理しやすい幅になるようにListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)を使用することです。 – YWE

+0

Nope。それは本当にうまくいきません。 – YWE

+0

私は試してもうまく動作しました。投稿がスニペットで更新されました。 –

0

問題が再現できない場合は、ListViewItemをダブルチェックして、Listviewに追加してください。

+0

具体的に何を確認するのですか? – YWE

0

我々は、2列のリストビューの例を取ると、最小幅次いで内容 上にリサイズ。

// Auto resize of ListView Columns to minimum width 
private int[] ColumnsWidth = { 35, 322 }; 

/// <summary> 
/// Resize the columns based on the items entered 
/// </summary> 
private void ResizeColumns() 
{ 
    // Auto Resize Columns based on content 
    m_urlsListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
    // Make sure to resize to minimum width 
    if (m_urlsListView.Columns[0].Width < ColumnsWidth[0]) 
    { 
     m_urlsListView.Columns[0].Width = ColumnsWidth[0]; 
    } 
    if (m_urlsListView.Columns[1].Width < ColumnsWidth[1]) 
    { 
     m_urlsListView.Columns[1].Width = ColumnsWidth[1]; 
    } 
}