C# GTK#应用程序结构

C# GTK#应用程序结构,c#,gtk,gtk#,C#,Gtk,Gtk#,我是桌面应用程序的新手,我想创建一个只使用一个窗口的应用程序。首先,我创建了一个带有“LOGIN”按钮和两个文本字段的简单登录表单。当用户成功登录时,窗口将更改其形式。我固定了一个主窗体,用户可以通过单击右侧的1..4个按钮在“屏幕”之间切换(我不知道如何正确命名)。我们有一个顶部面板,上面有个人资料照片和昵称,它们一直以主窗体的形式存在 所以,主要的问题是:我应该怎么做?我应该使用哪些小部件,GTK+中的动态内容(以及其他,如Qt等)应该如何实现?所以我想要答案,链接到涵盖这种情况的主题,指南

我是桌面应用程序的新手,我想创建一个只使用一个窗口的应用程序。首先,我创建了一个带有“LOGIN”按钮和两个文本字段的简单登录表单。当用户成功登录时,窗口将更改其形式。我固定了一个主窗体,用户可以通过单击右侧的1..4个按钮在“屏幕”之间切换(我不知道如何正确命名)。我们有一个顶部面板,上面有个人资料照片和昵称,它们一直以主窗体的形式存在

所以,主要的问题是:我应该怎么做?我应该使用哪些小部件,GTK+中的动态内容(以及其他,如Qt等)应该如何实现?所以我想要答案,链接到涵盖这种情况的主题,指南和课程。什么都可以

我读了很多文档,但似乎我找不到合适的信息,因为我不知道如何表述搜索查询的问题

谢谢,我希望能找到一些帮助


另外,我将在这个应用程序中使用C#和GTK。

我建议您看看。这将使您能够在单个窗口中拥有多个小部件布局,并为您提供一种更改显示哪些小部件的简单方法。GtkStack常用于。不过,普通按钮也能正常工作。我还可以建议您使用布局小部件吗?这将向您展示小部件集的外观


编辑:GtkStack似乎对Gtk不可用。

您只需要创建各种框(Gtk.VBoxGtk.HBox),并根据需要隐藏/显示它们。我不知道Gtk.Stack,但我打赌它使用了相同的原理,可能是经过了一些优化

class UniqueWindowView: Gtk.Window
{
    void Build()
    {
        var vbMainBox = new Gtk.VBox();

        this.vbLoginPage = this.BuildLoginPage();
        this.vbNotebook = this.BuildNotebook();

        vbMainBox.PackStart( this.vbLoginPage, true, true, 100 );
        vbMainBox.PackStart( this.vbNotebook, true, true, 5 );
        vbMainBox.Show();

        this.Add( vbMainBox );
        this.SetSizeRequest( 600, 400 );
        this.Show();
    }

    // ...

    public Gtk.VBox vbLoginPage {
        get; private set;
    }

    public Gtk.VBox vbNotebook {
        get; private set;
    }

    public Gtk.Notebook nbNotebook {
        get; private set;
    }

    public Gtk.Button btLogin {
        get; private set;
    }
}
运行此方案后,必须准备显示或隐藏相应的框

class UniqueWindowCtrl
{
    public UniqueWindowCtrl()
    {
        this.view = new UniqueWindowView();
        this.view.DeleteEvent += (o, args) => this.Quit();
        this.view.btLogin.Clicked += (sender, e) => this.ShowNotebook();
    }

    public void Start()
    {
        this.ShowLogin();
    }

    public void ShowLogin()
    {
        this.view.vbLoginPage.Show();
        this.view.nbNotebook.Hide();
    }

    public void ShowNotebook()
    {
        this.view.vbLoginPage.Hide();
        this.view.nbNotebook.Show();
    }

    void Quit()
    {
        this.view.Hide();
        Gtk.Application.Quit();
    }

    UniqueWindowView view;
}
您可以找到一个完整的源代码。
希望这能有所帮助。

感谢您推荐一个非常有趣的容器。看来这会有所帮助。但是,不幸的是,正如我所看到的,GTK缺乏这一功能(如果我错了,请纠正我),因此我将继续听取答案。关于林间空地:是的,我用过。此外,我在Xamarin Studio和Monodevelop中内置了一些设计师(甚至可能是glade),在那里我有带小部件的WYSIWYG工作流。我认为所有Gtk小部件都可以在所有编程语言下使用。不过,打击谷歌并不能为C#带来GtkStack。这让我很好奇,你们不使用GObject内省吗?那个么每次用户点击按钮时在面板内创建新的小部件怎么样?面板将位于窗户的中心。这是一个好主意吗?可以通过从父容器中删除小部件并添加一个新的子小部件来完成,这比GtkStack要复杂一些。一些程序员做的另一件事是添加所有的小部件,然后设置一些可见的部件,并设置一些不可见的部件。在这种情况下,所有的小部件都将位于彼此之上(逻辑上),当按下按钮时,一组小部件将被激活。好吧,这似乎是合法的。谢谢