ser*_*0ne 2 .net c# custom-controls scrollable
我正在为语法编辑设计一个Windows窗体控件.我知道已经有很多在那里,像Scintilla的,FastColoredTextBox,Actipro语法Edito R,阿瓦隆编辑等我有设计自己的原因,所以这不是问题.
到目前为止,我一直在设计控件的外观和感觉.它需要能够垂直和水平控制.
我遇到的选项是:
我不确定哪些选项对我的控制来说是最佳实践.
我尝试使用ScrollableControl和ContainerControl,但这有一些非常不受欢迎的结果,可能是因为控件DisplayRectangle正在滚动...我不想要这个.我想滚动一个包含文本的自定义绘制矩形.
我尝试实例化HScrollBar和VScrollBar,但这看起来非常错误,并且在焦点方面效果不佳,我无法弄清楚如何正确捕获VScroll和HScroll事件.
我尝试使用ScrollBarRenderer,但这似乎只是为了实现滚动条而付出了很多努力,并且通过这种方法,我仍然必须适当地捕获和处理事件.
那么我应该使用哪种方法,或者我可能忽略了一种方法呢?
ScrollBarRenderer仅用于绘制滚动条,它实际上不执行任何滚动计算或动作.
就个人而言,我发现HScrollBar和VScrollBar相当笨拙的控件工作.
继承ScrollableControl(或Panel以获取内置的Windows控件边框)可能是最简单的.使用AutoScrollMinSize属性设置内部曲面的大小,然后使用AutoScrollPosition属性在图形对象上执行TranslateTransform以处理绘制控件的一部分的"where":
public class ScrollControl : ScrollableControl {
public ScrollControl() {
this.DoubleBuffered = true;
this.ResizeRedraw = true;
this.AutoScrollMinSize = new Size(0, 600);
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
e.Graphics.Clear(Color.White);
e.Graphics.TranslateTransform(this.AutoScrollPosition.X,
this.AutoScrollPosition.Y);
e.Graphics.FillRectangle(Brushes.Red, new Rectangle(16, 32, 64, 32));
}
}
Run Code Online (Sandbox Code Playgroud)
但要小心,语法文本编辑器是绘图控件的另一种野兽.我建议使用RichTextBox控件.
| 归档时间: |
|
| 查看次数: |
5553 次 |
| 最近记录: |