easywebfactory / gtksystem-windows-forms

C#桌面应用程序跨平台(windows、linux、macos)界面开发组件,基于GTK组件开发,该组件的核心优势是使用C#的原生winform表单控件窗体设计器,相同的属性方法,C#原生开发即可,无需学习。一次编译,跨平台运行。 便于开发跨平台winform软件,便于将C#升级为跨平台软件。
https://gitee.com/easywebfactory
GNU Lesser General Public License v3.0
137 stars 26 forks source link

新增加的 VScrollBar 显示错误,无法工作 #6

Closed towerbit closed 1 month ago

towerbit commented 1 month ago

最新的 H/VScrollBar 实现比我PR的代码要精简和优雅很多。 但是由于 Gtk.ScrollBar(Gtk.Orientation.Vertical) 似乎无法正常实例化垂直方向的滚动条,虽然背景框是垂直的,但是里面的滚动条仍是水平方向且无法滚动,所以我最后只能改为从 Gtk.VScrollBar 类继承,HScrollBar 则没有这个问题。

VScrollBar_ERROR

towerbit commented 1 month ago

参考 ScrollbarBase 的实现方式,这个问题可以这样解决

using System.ComponentModel;
using GTKSystem.Windows.Forms.GTKControls.ControlBase;

namespace System.Windows.Forms
{
    [DesignerCategory("Component")]
    public class VScrollBar : ScrollBar
    {
        public VScrollbarBase self = new VScrollbarBase();
        public override object GtkControl => self;
        public override Gtk.Adjustment Adjustment { get => self.Adjustment; }
        public VScrollBar() : base()
        {

        }
    }

    public sealed class VScrollbarBase : Gtk.VScrollbar, IControlGtk
    {
        public GtkControlOverride Override { get; set; }
        internal VScrollbarBase() : base(new Gtk.Adjustment(0, 0, 100, 1, 10, 0))
        {
            this.Override = new GtkControlOverride(this);
        }
    }
}
towerbit commented 1 month ago

用泛型解决很完美