<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # GTK# 中的事件 > 原文: [http://zetcode.com/gui/gtksharp/events/](http://zetcode.com/gui/gtksharp/events/) 在 GTK# 編程教程的這一部分中,我們將討論事件。 GTK# 庫是一個事件驅動的系統。 所有 GUI 應用都會對事件做出反應。 應用啟動一個主循環,該循環不斷檢查新生成的事件。 如果沒有事件,則應用將等待并且不執行任何操作。 事件主要由應用的用戶生成。 但是它們也可以通過其他方式生成,例如互聯網連接,窗口管理器或計時器。 ## 簡單事件示例 下一個示例顯示了我們如何應對兩個基本事件。 `quitbutton.cs` ```cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base ("Button") { SetDefaultSize(250, 200); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Fixed fix = new Fixed(); Button quit = new Button("Quit"); quit.Clicked += OnClick; quit.SetSizeRequest(80, 35); fix.Put(quit, 50, 50); Add(fix); ShowAll(); } void OnClick(object sender, EventArgs args) { Application.Quit(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 在我們的代碼示例中,我們對兩個事件作出反應:`Delete`事件和`Clicked`事件。 當我們關閉窗口時,將觸發刪除事件。 默認情況下,當我們單擊標題欄中的關閉按鈕時,應用不會退出。 ```cs DeleteEvent += delegate { Application.Quit(); }; ``` 當我們使用`delegate`關鍵字時,我們可以編寫將對這個特定事件做出反應的行代碼。 ```cs quit.Clicked += OnClick; ``` 在這里,我們指定使用`OnClick()`方法對`Clicked`事件做出反應。 ```cs void OnClick(object sender, EventArgs args) { Application.Quit(); } ``` 這是`OnClick()`方法。 它有兩個參數。 第一個參數是對象,它觸發了此事件。 在我們的例子中,它是退出按鈕。 第二個參數為我們提供了有關事件的各種其他信息。 事件參數始終取決于事件的類型。 每種方法的簽名都可以在 GTK# 庫的參考手冊中找到。 [http://www.go-mono.com/docs/](http://www.go-mono.com/docs/) ## 移動窗口 下一個示例顯示了我們如何對移動窗口事件做出反應。 我們在標題欄中顯示窗口左上角的當前位置。 `move.cs` ```cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base("") { SetDefaultSize(250, 150); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Show(); } protected override bool OnConfigureEvent(Gdk.EventConfigure args) { base.OnConfigureEvent(args); Title = args.X + ", " + args.Y; return true; } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 在前面的示例中,我們已將委托或方法插入事件。 在 GTK# 中,許多事件已經具有處理器方法。 在這種情況下,我們可以覆蓋該方法。 在我們的代碼示例中就是這種情況。 ```cs protected override bool OnConfigureEvent(Gdk.EventConfigure args) { base.OnConfigureEvent(args); Title = args.X + ", " + args.Y; return true; } ``` 在這里,我們將覆蓋預定義的`OnConfigureEvent()`方法。 當我們調整大小或移動窗口小部件時,觸發`Configure`事件。 請注意,該方法的第一行調用默認方法。 沒有此行,程序將無法正常運行。 下一行將窗口的 x,y 坐標設置為窗口的標題。 ![Move event](https://img.kancloud.cn/be/67/be67f1b64358bffdf65c756cab3a91d0_258x178.jpg) 圖:移動事件 ## `EnterNotifyEvent` 當我們使用鼠標指針進入小部件的區域時,會發出`EnterNotifyEvent`。 `enter.cs` ```cs using Gtk; using System; class SharpApp : Window { public SharpApp() : base("Enter") { SetDefaultSize(200, 150); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; Button button = new Button("Button"); button.EnterNotifyEvent += OnEnter; Fixed fix = new Fixed(); fix.Put(button, 20, 20); Add(fix); ShowAll(); } void OnEnter(object sender, EnterNotifyEventArgs args) { Button button = (Button) sender; button.ModifyBg(StateType.Prelight, new Gdk.Color(220, 220, 220)); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 一旦將鼠標指針懸停在按鈕小部件上,我們將更改其背景顏色。 ```cs button.EnterNotifyEvent += OnEnter; ``` 我們將`OnEnter()`方法插入`EnterNotifyEvent`。 ```cs Button button = (Button) sender; button.ModifyBg(StateType.Prelight, new Gdk.Color(220, 220, 220)); ``` 我們獲取按鈕小部件并修改其背景顏色。 ## 斷開事件處理器 我們可以從事件斷開處理器方法。 下一個代碼示例演示了這種情況。 `disconnect.cs` ```cs using Gtk; using System; class SharpApp : Window { Button button; public SharpApp() : base("Disconnect") { SetDefaultSize(250, 150); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; button = new Button("Button"); CheckButton cb = new CheckButton("connect"); cb.Toggled += OnToggled; Fixed fix = new Fixed(); fix.Put(button, 30, 50); fix.Put(cb, 130, 50); Add(fix); ShowAll(); } void OnClick(object sender, EventArgs args) { Console.WriteLine("Click"); } void OnToggled(object sender, EventArgs args) { CheckButton cb = (CheckButton) sender; if (cb.Active) { button.Clicked += OnClick; } else { button.Clicked -= OnClick; } } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } } ``` 在代碼示例中,我們有一個按鈕和一個復選框。 當我們單擊按鈕并且復選框處于活動狀態時,我們在控制臺中顯示`"Click"`文本。 該復選框可將處理器方法與按鈕`Clicked`事件連接或斷開連接。 ```cs CheckButton cb = new CheckButton("connect"); cb.Toggled += OnToggled; ``` 我們有一個復選框。 該小部件具有`Toggled`事件。 我們將`OnToggled()`方法插入此事件。 ```cs CheckButton cb = (CheckButton) sender; if (cb.Active) { button.Clicked += OnClick; } else { button.Clicked -= OnClick; } ``` 這些行根據復選框小部件的狀態連接或斷開事件處理器。 ![Disconnect](https://img.kancloud.cn/38/6c/386c68b4c3217d8e2a416ddc3367f9cf_258x178.jpg) 圖:斷開連接 本章是關于 GTK# 中的事件的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看