Tôi đang cố gắng tạo điều khiển Bảng điều khiển tùy chỉnh bằng công cụ bố cục của riêng mình. tôi cần mọi điều khiển được bổ sung vào bảng điều khiển của tôi để được thêm vào bên dưới và lấy toàn bộ chiều rộng (-padding), như dưới đây: Bảng điều khiển tùy chỉnh với công cụ bố cục
Dưới đây là mã của tôi:
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Layout;
namespace VContainer
{
internal class VerticalFillList : Panel
{
public VerticalFillList()
{
AutoScroll = true;
MinimumSize = new Size(200, 200);
Size = new Size(200, 300);
Padding = new Padding(10);
}
private readonly VerticalFillLayout _layoutEngine = new VerticalFillLayout();
public override LayoutEngine LayoutEngine
{
get { return _layoutEngine; }
}
private int _space = 10;
public int Space
{
get { return _space; }
set
{
_space = value;
Invalidate();
}
}
}
internal class VerticalFillLayout : LayoutEngine
{
public override bool Layout(object container, LayoutEventArgs layoutEventArgs)
{
var parent = container as VerticalFillList;
Rectangle parentDisplayRectangle = parent.DisplayRectangle;
Point nextControlLocation = parentDisplayRectangle.Location;
foreach (Control c in parent.Controls)
{
if (!c.Visible)
{
continue;
}
c.Location = nextControlLocation;
c.Width = parentDisplayRectangle.Width;
nextControlLocation.Offset(0, c.Height + parent.Space);
}
return false;
}
}
}
Trên đang hoạt động tốt , ngoại trừ một điều: khi tôi thêm điều khiển vào vùng chứa của mình, chúng được thêm chính xác (mới dưới cha mẹ, chiều rộng 100%), nhưng khi chiều cao của điều khiển lớn hơn chiều cao vùng chứa của tôi, tôi nhận thanh cuộn ngang, nhưng sau khi thêm điều khiển cặp nhiều thanh cuộn được loại bỏ.
Cùng một điều sẽ xảy ra khi tôi muốn thay đổi kích thước container của tôi:
Làm thế nào điều này có thể được cố định? Tôi chỉ cần loại bỏ thanh cuộn ngang đó.
Tất nhiên tất cả những cải tiến được hoan nghênh :)
Tôi không muốn sử dụng bố trí bàn hay chảy bố trí như một này mang lại cho tôi chính xác khi nào tôi cần.
Tôi cần một thùng chứa đơn giản đặt hàng tất cả các điều khiển con từ trên xuống dưới và trải dài theo chiều ngang để chúng có chiều rộng nhiều nên thanh cuộn ngang không cần thiết.
nhưng nếu nó được cố định, bạn có thể không đưa bottons tin mãi mãi ... o_o – MayogaX
@MayogaX - Tôi biết điều đó :) Tôi chỉ muốn thể hiện quan điểm của mình. Tôi sẽ có các điều khiển tùy chỉnh thay vì các nút. Quan điểm của tôi là cho thấy cách hoạt động của bảng điều khiển. Hầu hết thời gian tôi sẽ có 2-3 điều khiển trong đó, nhưng khi người dùng sẽ thêm mới, tôi muốn tránh tình huống khi thanh cuộn ngang có thể nhìn thấy được. Tình huống tương tự với việc thay đổi kích thước ứng dụng của tôi. Tôi sẽ giữ tối đa 5-6 điều khiển trong đó. Trên đây chỉ là một bản demo để hiển thị hành vi không mong muốn. – Misiu
Bạn đang cố gắng giải quyết vấn đề mà các nhà thiết kế Winforms cẩn thận bên bước trong lớp LayoutEngine của họ. Các bố cục như thế này là * bi-ổn định *. Các kết quả điển hình nhất của cố gắng để giải quyết nó là bị mắc kẹt trong một vòng lặp vô tận với thanh cuộn ngang nhấp nháy và tắt. Bạn đang kinda doomed để tái tạo lại các lớp học và cuối cùng làm nó theo cùng một cách. –