<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 功能強大 支持多語言、二開方便! 廣告
                # Mono Winforms 中的拖放 > 原文: [http://zetcode.com/tutorials/ironpythontutorial/dragdrop/](http://zetcode.com/tutorials/ironpythontutorial/dragdrop/) IronPython Mono Winforms 教程的這一部分將專門用于拖放操作。 在計算機圖形用戶界面中,拖放是單擊虛擬對象并將其拖動到其他位置或另一個虛擬對象上的動作(或支持以下動作)。 通常,它可用于調用多種動作,或在兩個抽象對象之間創建各種類型的關聯。 (維基百科) 拖放功能是圖形用戶界面最明顯的方面之一。 拖放操作使您可以直觀地完成復雜的事情。 ## 拖動按鈕 在第一個示例中,我們將在按鈕控件上執行拖放操作。 該示例在拖放&放置協議之外執行作業。 `dragbutton.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, Button from System.Drawing import Size, Point class IForm(Form): def __init__(self): self.Text = 'Drag & Drop' button = Button() button.Parent = self button.Text = 'Button' button.MouseDown += self.OnMousDown button.MouseUp += self.OnMousUp button.MouseMove += self.OnMousMove button.Location = Point(20, 20) self.isDragging = False self.CenterToScreen() def OnMousDown(self, sender, event): self.isDragging = True self.oldX = event.X self.oldY = event.Y def OnMousMove(self, sender, event): if self.isDragging: sender.Top = sender.Top + (event.Y - self.oldY) sender.Left = sender.Left + (event.X - self.oldX) def OnMousUp(self, sender, event): self.isDragging = False Application.Run(IForm()) ``` 該代碼示例將一個常規按鈕控件放在表單容器上。 通過單擊按鈕表面并同時用鼠標拖動它,我們可以重新放置按鈕。 我們的示例中有一些支持變量。 `isDragging`變量告訴我們是否正在拖動對象。 `oldX`和`oldY`變量在拖動過程開始之前存儲 x,y 坐標。 ```py button.MouseDown += self.OnMousDown button.MouseUp += self.OnMousUp button.MouseMove += self.OnMousMove ``` 我們為按鈕插入了三種不同的鼠標處理器。 它們實現了拖放過程的三個不同階段。 當我們單擊按鈕時,過程開始。 這由`OnMousDown()`方法處理。 第二部分是機芯。 這是當我們將對象移動到新位置時。 它以`OnMousMove()`方法處理。 最后一部分是過程停止的時間。 當我們釋放鼠標按鈕時會發生這種情況。 適當的任務委托給`OnMousUp()`方法。 ```py def OnMousDown(self, sender, event): self.isDragging = True self.oldX = event.X self.oldY = event.Y ``` `OnMousDown()`方法實現了過程的第一部分。 它設置了三個必要的變量。 ```py def OnMousMove(self, sender, event): if self.isDragging: sender.Top = sender.Top + (event.Y - self.oldY) sender.Left = sender.Left + (event.X - self.oldX) ``` 在`OnMousMove()`方法中,我們重新定位按鈕。 我們計算存儲的 x,y 坐標與鼠標指針的新坐標之間的差。 差異將添加到按鈕的`Top`和`Left`屬性中,從而將其移動到新位置。 ![Dragging a button](https://img.kancloud.cn/89/45/8945535f7cdb88680bc363de7d4b01e4_270x181.jpg) 圖:拖動按鈕 ## 拖動文字 在前面的示例中,我們確實拖動了控件上的&拖放。 接下來,我們將對文本數據進行拖放操作。 在這里,我們將使用 Winforms 庫提供的拖放協議。 拖放操作是 Winforms 中的標準通信協議。 我們有兩個基本對象。 拖動源和放置目標。 `dragtext.py` ```py #!/usr/bin/ipy import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, Button from System.Windows.Forms import TextBox, DragDropEffects, DataFormats from System.Drawing import Size, Point class IForm(Form): def __init__(self): self.Text = 'Drag & Drop' self.AllowDrop = True button = Button() button.Parent = self textBox = TextBox() textBox.Parent = self button.AllowDrop = True button.Location = Point(150, 50) button.DragDrop += self.OnDragDrop button.DragEnter += self.OnDragEnter textBox.Location = Point(15, 50) textBox.MouseDown += self.OnMousDown self.ClientSize = Size(250, 200) self.CenterToScreen() def OnMousDown(self, sender, event): sender.SelectAll() sender.DoDragDrop(sender.Text, DragDropEffects.Copy) def OnDragEnter(self, sender, event): if event.Data.GetDataPresent(DataFormats.Text): event.Effect = DragDropEffects.Copy def OnDragDrop(self, sender, event): sender.Text = event.Data.GetData(DataFormats.Text) Application.Run(IForm()) ``` 我們在表單上有兩個控件。 一個按鈕和一個文本框。 我們將文本從文本框中拖放到按鈕上。 ```py self.AllowDrop = True ``` 我們將`AllowDrop`屬性設置為`true`。 默認情況下不啟用刪除。 ```py button.DragDrop += self.OnDragDrop button.DragEnter += self.OnDragEnter ... extBox.MouseDown += self.OnMousDown ``` 同樣,拖放過程分為三個步驟。 對于每個特定步驟,我們有三種方法。 ```py def OnMousDown(self, sender, event): sender.SelectAll() sender.DoDragDrop(sender.Text, DragDropEffects.Copy) ``` 在`OnMousDown()`方法中,我們初始化了拖放過程。 我們使用`DoDragDrop()`方法啟動該過程。 `DragDropEffects.Copy`參數指定操作的類型。 實質上,我們可以在拖放操作期間復制文本或移動文本。 ```py def OnDragEnter(self, sender, event): if event.Data.GetDataPresent(DataFormats.Text): event.Effect = DragDropEffects.Copy ``` 當鼠標指針進入放置目標控件的區域時,將啟動`DragEnter`事件。 必須設置`Effect`屬性。 拖動源和放置目標的`DragDropEffects`必須相等。 否則,該操作將無法進行。 ```py def OnDragDrop(self, sender, event): sender.Text = event.Data.GetData(DataFormats.Text) ``` 最后,我們有`OnDragDrop()`方法。 在這里,我們從事件對象獲取數據并將其設置為按鈕`Text`屬性。 ![Drag & drop of text](https://img.kancloud.cn/f8/29/f82926d05d95f49995adf32d2c1f11c2_258x228.jpg) 圖:文本拖放 ## 拖動圖像 在最后一個示例中,我們將&拖放圖像拖到窗體上。 `dragimage.py` ```py #!/usr/bin/ipy import sys import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Windows.Forms import Application, Form, PictureBox, PictureBoxSizeMode from System.Windows.Forms import Cursors from System.Drawing import Size, Point, Rectangle, Brushes, Bitmap class IForm(Form): def __init__(self): self.ClientSize = Size(350, 250) self.Text = "Dragging Images" self.Paint += self.OnPaint self.isDragging = False self.dropRect = Rectangle(10, 10, 200, 160) self.brush = Brushes.Gray picBox = PictureBox() self.loadImage() self.isDragging = False self.CenterToScreen() picBox.Parent = self picBox.Location = Point(100, 50) picBox.Size = Size(self.image.Width, self.image.Height) picBox.Image = self.image picBox.MouseDown += self.OnMousDown picBox.MouseUp += self.OnMousUp picBox.MouseMove += self.OnMousMove picBox.Cursor = Cursors.Hand def loadImage(self): try: self.image = Bitmap("image.jpg") except Exception, e: print "Error reading image" print e.msg sys.exit(1) def OnMousMove(self, sender, event): if self.isDragging: sender.Top = sender.Top + (event.Y - self.oldY) sender.Left = sender.Left + (event.X - self.oldX) def OnMousUp(self, sender, event): self.isDragging = False if self.dropRect.Contains(sender.Bounds): self.brush = Brushes.Gold else: self.brush = Brushes.Gray self.Refresh() def OnMousDown(self, sender, event): self.isDragging = True self.oldX = event.X self.oldY = event.Y def OnPaint(self, event): g = event.Graphics g.FillRectangle(self.brush, self.dropRect) Application.Run(IForm()) ``` 在我們的示例中,我們有一個`PictureBox`,并繪制了一個灰色矩形。 如果將圖片放在矩形內,則矩形的顏色變為金色。 ```py self.brush = Brushes.Gray ``` `self.brush`變量保存矩形的筆刷。 默認情況下為灰色。 ```py def loadImage(self): try: self.image = Bitmap("image.jpg") except Exception, e: print "Error reading image" print e.msg sys.exit(1) ``` `loadImage()`方法為`PictureBox`控件加載位圖。 ```py if self.dropRect.Contains(sender.Bounds): self.brush = Brushes.Gold else: self.brush = Brushes.Gray ``` 在`OnMousUp()`方法中,我們確定矩形的筆刷。 如果圖片框的邊界在矩形內,則畫筆為金色;否則,畫筆為金色。 否則為灰色。 ```py self.Refresh() ``` 我們必須調用`Refresh()`方法來激活新的畫筆顏色。 ![Drag & drop image](https://img.kancloud.cn/c5/46/c54686d561cc3865d33ccf61dd4af487_358x278.jpg) 圖:拖放圖像 本章專門使用 Mono Winforms 庫拖放操作。
                  <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>

                              哎呀哎呀视频在线观看