Ubuntu20.4 Mono C# gtk 编程习练笔记(二)

这篇具有很好参考价值的文章主要介绍了Ubuntu20.4 Mono C# gtk 编程习练笔记(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

界面设计习练后,下面写一些程序设计心得。

程序结构

先看一下程序总体结构,先在program.cs中找到main入口,在命名空间下是MainClass类,Main函数进入后首先建立应用程序环境 Application.Init,然后对MainWindow进行实例化,显示窗体并运行程序 Application.Run()。

//Program.cs

using System;
using Gtk;

namespace csharp3
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Application.Init();
            MainWindow win = new MainWindow();
            win.Show();
            Application.Run();
        }
    }
}

main -> application init -> mainwindow{builder} ->application run/quit

上述过程中,mainwindow如下,它通过gtk库产生一个窗体及窗体包含的其它widgets,然后连通widgets的信号 - 属性和事件。这其中用到一个 Build() 函数,在C调用中常命名为 builder的指针,在gnome-builder构建器中称之为 template ,将界面设计器的设计文件变成程序来实现。public partial class MainWindow, 指明这只是 partial,一部分内容,还有一部分由 Build() 产生。在linux中,Gtk界面库与用户程序之间一般都是这种方式。

//mainwindow.cs

using System;
using Gtk;

public partial class MainWindow : Gtk.Window
{
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
    }

    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        Application.Quit();
        a.RetVal = true;
    }

    protected void OnButton5Clicked(object sender, EventArgs e)
    {
        entry2.Text = "Hello!";
    }

    protected void OnButton6Clicked(object sender, EventArgs e)
    {
        Application.Quit();
    }
}

也可以不用设计器,自己写build的内容。Mono的设计器支持C#,但不支持VB.NET,而Mono本身是支持VB.NET的。因此,如果在Mono上用VB.NET开发的话,需要自己写build后的界面语句。大至是下面的样子。首先产生个Window,然后向window中加入控件并显示控件,如果需要产生事件则将事件与回调函数过程的地址连起来(Addressof),最后show的是window。除了主窗体给个初始尺寸,控件本身一般都是由sizer,比如vbox等去控制的。习惯于linux界面这种方式后,可以不用界面设计器,脑子想它是什么样就add上什么widget,个别属性调整一下,fill和expand用好,加控件时pack靠start或靠end,最后试运行调整一下就可以了。

        Dim window As Gtk.Window = New Gtk.Window("Buttons")
        AddHandler window.DeleteEvent, AddressOf OnDeleteEvent
        window.BorderWidth = 0

        window.Resize(800, 600)
        window.WindowPosition = WindowPosition.Center

        Dim box1 As VBox = New VBox(False, 10)
        window.Add(box1)
        box1.Show()
        box1.Homogeneous = False

        Dim box2 As VBox = New VBox(False, 10)
        box2.BorderWidth = 10
        box1.PackStart(box2, True, True, 0)
        box2.Show()

        button1 = New Button("Button 1")
        box2.PackStart(button1, True, True, 0)
        button1.Show()
        AddHandler button1.Clicked, AddressOf OnButton1Clicked

        Dim button2 As Button = New Button("Button 2")
        'button2.Active = true
        box2.PackStart(button2, True, True, 0)
        button2.Show()

        Dim separator As HSeparator = New HSeparator()
        box1.PackStart(separator, False, True, 0)
        separator.Show()

        Dim box3 As VBox = New VBox(False, 10)
        box3.BorderWidth = 10
        box1.PackStart(box3, False, True, 0)

        Dim button3 As Button = New Button("Close")
        AddHandler button3.Clicked, AddressOf OnExitButtonEvent

        Dim entry1 As Entry = new Entry("Please")
        box3.PackStart(entry1, True, True, 0)
        entry1.Show()
        
        box3.PackStart(button3, True, True, 0)
        button3.CanDefault = True
        button3.GrabDefault()
        button3.Show()

Mono C#编程中,可以不关注Build后的内容,它们在另外一个.cs中。如果抽象一些理解的话,builder是图中的样子,像个黑盒子接线箱,编程时连通相应的信号即可。

Ubuntu20.4 Mono C# gtk 编程习练笔记(二),笔记

C#有设计器还是比VB.NET方便一些,不过在C#中也可以使用VB.NET功能,在引用中加上:

using VB = Microsoft.VisualBasic

引用后即产生新的命名空间VB,比如在C#中使用VB.NET的文件读写,可以写成:

                VB.FileSystem.FileOpen(1, "VBNETTEST.TXT", VB.OpenMode.Output, VB.OpenAccess.Write, VB.OpenShare.Shared);
                VB.FileSystem.WriteLine(1, "Hello World! - 1");
                VB.FileSystem.WriteLine(1, "Hello World! - 2");
                VB.FileSystem.WriteLine(1, "Hello World! - 3");
                VB.FileSystem.WriteLine(1, "Hello World! - 4");
                VB.FileSystem.WriteLine(1, "Hello World! - 5");
                VB.FileSystem.FileClose(1);

微软的Microsoft.VisualBasic命名空间中VB.NET功能繁多,喜欢VB.NET编程的话可以把它引用到进程序中,Mono的C#设计器也就间接地支持VB.NET语言开发了。

用户程序

默认的MainWindow.cs产生MainWindow:Gtk.Window类,里面有个MainWindow()方法,方法中首先是Build(),自己的程序一般使用这个类,加入一些类内变量,在类内加入一些方法等。需要的话也可另僻空间,用另类,用另类方法等。

//MainWindow.cs

using System;
using Gtk;
using System.Threading.Tasks;
using VB = Microsoft.VisualBasic;
using Cairo;

public partial class MainWindow : Gtk.Window
{
    //Store previous background color of drawingarea1
    private Gdk.Color StoreColor = new Gdk.Color(255, 255, 255);
    private int iArea1ObjX = 10;
    private int iArea1ObjY = 50;
    private uint timerID1, timerID2;
    private ImageSurface surfacepub;
    private Context ctxpub;
    private Context ctxArea1;
    private int drawingarea1Width;
    private int drawingarea1Height;


    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();

        drawingarea1.AppPaintable = true;
        CreateContext();
        timerID1 = GLib.Timeout.Add(100, OnTimedEvent1);
        timerID2 = GLib.Timeout.Add(100, OnTimedEvent2);

        /*
        aTimer = new System.Timers.Timer(300);
        aTimer.Elapsed += OnTimedEvent;
        aTimer.AutoReset = true;
        aTimer.Enabled = true;
        */
    }

    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        DestroyContext();
        Gtk.Application.Quit();
        a.RetVal = true;
    }

    protected void OnButton16Clicked(object sender, EventArgs e)
    {
        DestroyContext();
        Gtk.Application.Quit();
    }

    protected void OnColorbutton1ColorSet(object sender, EventArgs e)
    {
        var redcolor = colorbutton1.Color.Red;
        var greencolor = colorbutton1.Color.Green;
        var bluecolor = colorbutton1.Color.Blue;
    }

先写这么多,一些常用widgets使用方法在下篇心得中写。文章来源地址https://www.toymoban.com/news/detail-812111.html

到了这里,关于Ubuntu20.4 Mono C# gtk 编程习练笔记(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu20.4配置arm交叉编译环境

    我是在虚拟机中配置的,如果你的嵌入式设备足够完成自己的编译,可以不考虑虚拟机的。 新安装的Ubuntu20.04系统请先执行以下代码 到aarch64下载对应的aarch64的base镜像。 之后执行如下命令,创建armsys文件夹,之后将刚下载的镜像拷贝到该文件夹下并且解压 安装一些必要的软

    2024年02月06日
    浏览(54)
  • ubuntu20.4升级OpenSSL和OpenSSH

    参考:https://blog.csdn.net/weixin_37534043/article/details/120822689 https://blog.csdn.net/xujiamin0022016/article/details/87817124 openssl 官方下载地址: https://www.openssl.org/source/ openssh 官方下载地址:https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/ zlib 官方下载地址: http://www.zlib.net/ CSDN资源下载链接: http

    2024年02月01日
    浏览(88)
  • ubuntu20.4安装配置ros系统(noetic)

    不同ubuntu版本对应的ros版本 ubuntu版本 ros1版本 ros2版本 16.04 kinetic ardent 18.04 melodic dashing 20.04 noetic foxy   1、打开软件与更新,切换ubuntu软件源(国内中科大源) 2、打开终端,添加ros软件源(中科大镜像站) 3、配置公钥   4、更新软件源   5、安装ros系统(ps:命令中的noetic根

    2024年02月07日
    浏览(44)
  • ubuntu20.4 静态网络配置(保姆级图文教程)

    之前一直使用的Linux系统都是centOs,突然换成Ubuntu之后不知道怎么配置网络,网上查找了很多资料都不可用,最后终于在一篇博客里看到了20.4版本的网络配置教程,在此贴上链接,并记录 Linux ubuntu20.04 网络配置(图文教程)_ubuntu20.04网络配置_isOllie的博客-CSDN博客 系统:ubu

    2024年02月05日
    浏览(44)
  • ubuntu 20.4完全卸载opencv 安装opencv 4.4

    首先完全卸载刷机时自带的opencv旧版本,不同版本版本会引起冲突。 1. 先到opencv编译安装的目录build下 cd build sudo make uninstall cd .. sudo rm -r build 2.也可以手动删除,总之删除干净即可。 sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/sh

    2024年02月06日
    浏览(42)
  • Ubuntu20.4 docker运行stable diffusion webui

    系统环境 ubuntu20.04 nvida cuda显卡驱动 默认已经安装成功 更新系统依赖: 确认是否之前安装过docker并卸载: 启动并查看docker运行状态: 注:这一部步基本可以忽略,因为没有使用国外dockerhub镜像! 安装 nvidia-docker2 包 安装完成后需要重启docker: 能输出cuda相关信息安装成功:

    2024年02月09日
    浏览(44)
  • AMD显卡Ubuntu20.4系统下部署stable diffusion

    今天来给大家做一个AMD显卡使用stable diffusion的小白(硬核)教程。最近这段时间AI特别火,很多小伙伴看到各种大佬用AI画的老婆非常精美(色情),弄的人心痒痒,自己也想画一个心仪的老婆(画作)。 太露骨的图片不能放,你们懂得!! 但是很多小伙伴用的是AMD的独立显

    2024年02月03日
    浏览(50)
  • 基于ubuntu20.4安装谷歌拼音中文输入法

    1.首先命令行安装汉语语言包 sudo apt-get install language-pack-zh-hans 执行该命令后,系统就会自动安装所需要的汉语语言包 图1 安装汉语语言包 2.然后命令行安装谷歌拼音输入法 sudo apt-get install fcitx-googlepinyin 执行该命令后,系统就会自动安装 fcitx 和 goolgepinyin 程序,也同时会安装

    2024年02月06日
    浏览(45)
  • ubuntu20.4源码安装最新gcc(gcc V12.2)

            Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新

    2024年02月01日
    浏览(74)
  • Ubuntu20.4 WSL2 无法访问github终极解决方案

    sudo rm /etc/resolv.conf sudo bash -c \\\'echo \\\"nameserver 8.8.8.8\\\" /etc/resolv.conf\\\' sudo bash -c \\\'echo \\\"[network]\\\" /etc/wsl.conf\\\' sudo bash -c \\\'echo \\\"generateResolvConf = false\\\" /etc/wsl.conf\\\'      

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包