<style type='text/css'>
#doc{
font-family:'Fira Code','Noto Sans CJK TC Regular','微軟正黑體' !important;
}
</style>
# 200519程二練習
###### tags: `教學`
## Listbox、RadioButton
題目:網購配送選項
- 付款方式
- 超商貨到付款選擇後
- 「配送時段」無法選擇、
- 「配送選項」無法選擇
- 宅配貨到付款選擇後,

- 「配送時段」Groupbox可選擇時段。
- 「配送選項」Groupbox不顯示。
- 信用卡付款、銀行轉帳、Paypal國際付費選擇後
- 需要再選擇「配送選項」,如果選擇宅配,則一樣要選擇「配送時段」

- 付款方式、配送選項、配送時段皆須將選擇的類型show在label中。
## DropDrog演練
[逐步解說:在 Windows Form 中執行拖放作業](https://docs.microsoft.com/zh-tw/dotnet/framework/winforms/advanced/walkthrough-performing-a-drag-and-drop-operation-in-windows-forms)
### 技巧、必要事項
以下將「被拖放控制項」稱A,「拖放控制項」稱B
* B控制項的`AllowDrop`設置為`true`
```csharp
B.AllowDrop=true;
```
預設原本為`false`,為了安全性
* A控制項要有一個「觸發拖曳」的事件
可以是MouseDown、MouseMove、MouseEnter
```csharp
A.MouseDown += A_MouseDown; //繫結function到控制項
private void A_MouseDown(object sender, MouseEventArgs e)
{
DoDragDrop(object data, DragDropEffects allowedEffects);
//object data可以是任何型別,舉凡String、char,甚至是Color
//DragDropEffects 可以是all、copy、move等
}
```
* B控制項加上兩個事件:DragEnter、DragDrop
* DragEnter 發生於物件拖曳至控制項邊框時發生
```csharp
B.DragEnter += B_DragEnter;
private void B_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
//以text為範例
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
```
* DragDrop 發生於拖放作業完成時
```csharp
B.DragDrop += B_DragDrop;
private void B_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Data.GetData(DataFormats.Text);
// e.Data.GetData(typeof(Object));
}
```
{"metaMigratedAt":"2023-06-15T08:24:19.235Z","metaMigratedFrom":"Content","title":"200519程二練習","breaks":true,"contributors":"[{\"id\":\"dd2f45ec-94d9-462f-b7a9-354dd49c4081\",\"add\":2207,\"del\":336}]"}