2011-07-26 81 views
6

Tôi có Biểu mẫu có hộp tổ hợp trên đó.Danh sách thả xuống Combobox

Hộp kết hợp được đặt DropDownList. Các mục thả xuống này là một dạng mô tả của một đối tượng. Điều này có nghĩa là họ có thể nhận được khá lâu. Vị trí của combobox trên màn hình có nghĩa là khi danh sách thả xuống được hiển thị, nó không phù hợp trên màn hình. Một số của nó được cắt nhỏ bởi cạnh phải của màn hình.

Tôi không thể di chuyển hộp tổ hợp.

Có cách nào đó để tôi có thể di chuyển phần danh sách thả xuống của điều khiển. Có lẽ trung tâm nó dưới sự kiểm soát?

Cập nhật

Tôi đã đính kèm ảnh chụp màn hình. Bạn có thể xem mẫu ở đây -

enter image description here

Khi nhập các giao dịch người dùng điền vào mẫu đơn và nhấp chuột vào Lưu. Một số giao dịch sẽ được nhập cho bất kỳ khách hàng nào mặc dù sẽ là các giao dịch định kỳ. Đây có thể được lưu vào mục yêu thích. Hộp thả xuống liệt kê các mục ưa thích hiện đang được lưu và khi một mục được chọn, chương trình sẽ tự động điền vào các trường giao dịch.

Ảnh chụp màn hình 2 hiển thị toàn bộ chương trình và danh sách combobox hết dung lượng.

enter image description here

Tôi nhận ra từ ảnh chụp màn hình tôi có thể di chuyển theo hình thức nhưng tôi muốn giữ những hình thức để nhập các giao dịch tập trung vào màn hình.

Tôi có thể phải xem xét các tùy chọn khác cho giao diện.

Cảm ơn,

+1

gợi ý: tại sao không sử dụng một thả xuống với đơn giản tên/đường, và một hộp văn bản nhiều dòng mà là dân cư với mô tả đầy đủ khi người dùng chọn một nhập trong combobox. Bằng cách này, hộp văn bản có thể chứa tất cả văn bản và người dùng hài lòng :) – woohoo

+0

Có vẻ như bạn có vấn đề tương tự với http://stackoverflow.com/questions/2395747/combo-box-dropdown-position – kavun

+0

Cách này về việc sử dụng một ListBox cột đơn hoặc ListView cung cấp thanh cuộn. Đạt được điều này không dễ dàng với ComboBox. – CharithJ

Trả lời

0

Bạn có cố gắng thiết lập trong thiết kế

Combobox.Anchor = Left | Right 
+0

@ user476683. Điều này không giúp được gì. – user476683

0

Hãy thử thiết lập các DropdownWidth của combo.

0

Xin lỗi vì trễ gửi bài :-). Đúng, bạn có thể làm điều đó. Nhưng bạn cần tạo một tùy chỉnh ComboBox và ghi đè phương thức WndProc của cơ sở ComboBox;

Giống như thế này;

System.Runtime.InteropServices 

private const int SWP_NOSIZE = 0x1; 
private const int WM_CTLCOLORLISTBOX = 0x0134; 

[DllImport("user32.dll")] 
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int 
X, int Y, int cx, int cy, uint uFlags); 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_CTLCOLORLISTBOX) 
    { 
     // Make sure we are inbounds of the screen 
     int left = this.PointToScreen(new Point(0, 0)).X; 

     //Only do this if the dropdown is going off right edge of screen 
     if (this.DropDownWidth > Screen.PrimaryScreen.WorkingArea.Width - left) 
     { 
      // Get the current combo position and size 
      Rectangle comboRect = this.RectangleToScreen(this.ClientRectangle); 

      int dropHeight = 0; 
      int topOfDropDown = 0; 
      int leftOfDropDown = 0; 

      //Calculate dropped list height 
      for (int i = 0; (i < this.Items.Count && i < this.MaxDropDownItems); i++) 
      { 
       dropHeight += this.ItemHeight; 
      } 

      //Set top position of the dropped list if 
      //it goes off the bottom of the screen 
      if (dropHeight > Screen.PrimaryScreen.WorkingArea.Height - 
        this.PointToScreen(new Point(0, 0)).Y) 
      { 
       topOfDropDown = comboRect.Top - dropHeight - 2; 
      } 
      else 
      { 
       topOfDropDown = comboRect.Bottom; 
      } 

      //Calculate shifted left position 
      leftOfDropDown = comboRect.Left - (this.DropDownWidth - 
        (Screen.PrimaryScreen.WorkingArea.Width - left)); 
      //when using the SWP_NOSIZE flag, cx and cy params are ignored 
      SetWindowPos(m.LParam, 
         IntPtr.Zero, 
         leftOfDropDown, 
         topOfDropDown, 
         0, 
         0, 
         SWP_NOSIZE); 
      } 
     } 

     base.WndProc(ref m); 
} 

Mã này là lấy từ một bài báo MSDN Building a Better ComboBox

Các vấn đề liên quan