2009-05-02 3 views
6

사용자가 추가 한 ListBox가있는 C# App (WinForm)을 작성하고 있습니다. 이제 ListBox 아래에 일반 버튼을 추가하여 아이템을 제거 할 수는 있지만, 컨텐츠 바로 옆에 버튼을 배치하여 ListBox 내부에 넣고 싶습니다. 이처럼ListBox 안에 Button 추가하기

:

  • 내용 1 일 | X
  • 내용 2 | X
  • ...
  • 내용 5 | X

문제는 .NET에서 경험이 부족하여 모든 자동화 된 컨트롤이 가능할 수있는 방법에 대한 단서가 없다는 것입니다. 나는 그것을 봤지만 의미있는 결과가 없었다.

이것을 달성하기위한 힌트, 단서 또는 발췌문을 환영합니다! :)

+0

Win Forms 또는 ASP.NET? – Canavar

+0

그리고 실제로 질문을 읽으려고 downvoted .... : 한숨 : –

+0

@ Canavar WinForms. @Deviant Downvoted? – Vectovox

답변

3

그래서 사용자 정의 컨트롤을 만들 수 있지만 내 앱에서는 문제가되지 않습니다.

DataGrid를 만들면 ListView와 유사하지만 자체 플레어가 만들어집니다.DataGrid에 이미 buttoncontrol이 내장되어 있기 때문에이 작업을 수행했습니다.

예, 일종의 '해킹'을 알고 있지만, 매력처럼 작동합니다. :)

Should Erlichmen에게 Props를 보내서 내 생각에 외부 사이트로 이끌었습니다. 내가 그곳에서 무엇을했는지 보아라. ;)

+1

예, DataGrid는 ListBox보다 복잡하지만 그래도 잘 작동합니다. HTML이나 비슷한 스타일로 테이블처럼 보이게 만들 수 있습니다. –

0

나는 왜 당신이 그렇게 구체적으로하고 싶은지 모르겠다? 목록 상자에서 선택한 항목을 삭제하는 버튼을 맨 아래에 놓습니다. 그건 당신이 jquery를 사용하고 데이터베이스에 저장되어 있거나 페이지의 목록에서 항목을 제거 할 경우 항목을 삭제하기 위해 호출을 보내는 목록 상자에 onClick 이벤트를 넣기를 원하지 않는 한 그러한 일을하는 일반적인 방법으로 간주됩니다 .

+3

글쎄, 난 평소와 아니에요 그리고 나는 더 고급 옵션에가는 경향이 있습니다. 문제는 측면의 버튼 (또는 아이콘 버튼)이 눈을 즐겁게하며 클릭당 클릭 수를 줄이는 것입니다. – Vectovox

1

WinForms 응용 프로그램이라고 가정하십시오.

사용자 정의 컨트롤이 필요합니다. 나는 http://www.devexpress.com/Products/NET/Controls/WinForms/Editors/editors/ListBoxes.xml과 같은 벤더를 조사 할 것입니다. 누군가가 특별히 그렇게하는 컨트롤을 알고 있을지도 모릅니다.

+0

좋아, 그냥 듣고 싶었던 것, 맞춤 제어 : – Vectovox

+0

자신 만의 통제를 할 수는 있지만 사소한 일이 아니다. –

2

using System; using System.Collections.Generic; using System.Windows.Forms;

네임 스페이스 WindowsFormsApplication11 { 공공 부분 Form1 클래스 : 양식 { 목록 _items = 새 목록();

public Form1() 
    { 
     InitializeComponent(); 

     _items.Add("One"); 
     _items.Add("Two"); 
     _items.Add("Three"); 

     listBox1.DataSource = _items; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // The Add button was clicked. 
     _items.Add("New item " + DateTime.Now.Second); 

     // Change the DataSource. 
     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     // The Remove button was clicked. 
     int selectedIndex = listBox1.SelectedIndex; 

     try 
     { 
      // Remove the item in the List. 
      _items.RemoveAt(selectedIndex); 
     } 
     catch 
     { 
     } 

     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 
    } 
} 

}

개인 무효를 Button1_Click (개체 보낸 사람, EventArgs입니다 전자) { //이 추가 버튼을 클릭했다. // ...

button2.Enabled = true; 

}

개인 무효 button2_Click (개체 보낸 사람, EventArgs입니다 전자) { //이 제거 버튼을 클릭했다. 대신 목록 상자는 목록보기 사용할 수 있습니다

if (listBox1.Items.Count == 0) 
{ 
    button2.Enabled = false; 
} 

}

+0

더 나은 질문을 읽어야한다;) –

+0

그래, 나는 내 생각을 읽지 않는 것 같아. 매우 철저하게 질문 :) – Vectovox

+0

@Alb 질문은 "그래서 ListBox의 내부"라고. 어쨌든 listbox.datasource = list의 기술은 명확한 것보다 훨씬 더 간결합니다. 그래도 대답은 가치가 있습니다. – prabhakaran

6

는 // ..., ListView에는 ability to add custom column types있다.

+0

ListBox와 ListView는 몇 마일 떨어져 있습니다. 어쩌면 그는 좋은 측정을 위해 나무 컨트롤을 던져야 할 것입니다 –

+1

전체 행 선택 및 그리드 선이없는 헤더가없는 보고서 모드의 ListView는 ListBox와 동일하게 보이고 작동합니다. 하위 항목으로 단추 (또는 해당 컨트롤의 다른 컨트롤)를 추가하는 것이 더 쉽습니다. 사용자 지정 컨트롤을 만드는 것이 더 좋습니다. –