日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战小技巧系列(4):WinForm简单步骤制作

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战小技巧系列(4):WinForm简单步骤制作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  進行類似于上一步,下一步的操作,是比較常見的,在WebAppliction中自從2.0發布以后到是已經有類似控件可以操作了,不知道為什么在Winform中好象沒有該控件(我沒有確認過,不知道是否真的沒有?)。所以沒有辦法,只好自己做了。

  問題:

  由于最近要做一個軟件的升級程序,程序本身比較簡單,無非是執行一些SQL語句,覆蓋一些文件而已,但我想模仿安裝程序一樣,可以進行步驟操作,基本要求如下:

  1、具有上一步,下一步操作;

  2、進行上一步和下一步操作時,能夠保持原有狀態,如我已經在這一步驟中錄入了一些數據,點擊下一步后,發現需要退回來修改,這時點擊上一步返回前一步驟,那原來錄入的數據必須還在;

  其實需求很簡單,這里主要是講一下我的思路,從而希望大家能夠提出自己的想法,進一步完善。

  解決方法:

  其實,對于winform來講,沒有多少經驗,本人主要是從事webapplicatioin開發,這次為了做這個升級程序,也查詢了一些資料,網上查到有一個,利用命令模式來操作步驟(忘記是看自哪里了)。本文里提到的解決方法根據這個演變而來,所有的步驟都是用用戶控件來實現。好了不多說了,直接看代碼吧:

  1、創建步驟基類

  namespace EcsPatch.PatchWizard
  {
   public class BaseWizard : UserControl
  {


  }
  }

  其實如果簡單的話這個基類根本就不用創建,因為所有的用戶控件,本身就繼承自UserControl基類的。這里還要另寫一個,主要是因為可能會有一些共用方法,為了便于重用,所以另外創建一個。

  2、所有的用戶控件都繼承1中創建的基類

  namespace EcsPatch.PatchWizard
  {
    public partial class TipModel : BaseWizard
    {
      public TipModel()
     {
       InitializeComponent();
     }
    }
  }

  其它步驟的用戶控件也類似,不一一貼代碼了。

  3、創建輔助類

  namespace EcsPatch.Component
  {
   public class WizardUtil
   {
    private static Dictionary<WizardItem, BaseWizard> wizardList;

     /// <summary>
    /// 初始化步驟列表
    /// </summary>
     public WizardUtil()
    {
     wizardList = new Dictionary<WizardItem, BaseWizard>();
     wizardList[WizardItem.Tip] = new TipModel();
     wizardList[WizardItem.SelectPath] = new SelectPathModel();
     wizardList[WizardItem.VersionTip] = new VersionTipModel();
     wizardList[WizardItem.StartPatch] = new StartPatchModel();
     wizardList[WizardItem.Complete] = new CompleteModel();
    }

     /// <summary>
    /// 更新步驟信息
    /// </summary>
     /// <param name="key"></param>
    /// <param name="wizard"></param>
     public void SetWizard(WizardItem key, BaseWizard wizard)
    {
     wizardList[key] = wizard;
    }

    /// <summary>
    /// 獲取步驟信息
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public BaseWizard GetWizard(WizardItem key)
    {
     BaseWizard wizard = wizardList[key];

      return wizard;
     }

    /// <summary>
    /// 根據狀態獲取步驟信息
    /// </summary>
    /// <param name="key"></param>
     /// <param name="state"></param>
    /// <returns></returns>
    public BaseWizard GetWizard(ref WizardItem key, WizardState state)
    {
      int position = (int)key;
     if (state == WizardState.Next)
     {
      position++;
     }
     else
     {
      position--;
     }
     WizardItem current = (WizardItem)position;
     key = current;
     return GetWizard(current);
    }

  }

  public enum WizardItem
   {
   Tip = 1,
   SelectPath,
   VersionTip,
   StartPatch,
   Complete
  }
  public enum WizardState
  {
   Next = 1,
   Previous,
  }
 }

  主要是把所有的用戶控件先初始化放在列表中,再加上一些方法來獲取和更新這些用戶控件的實例。主要實現思路如下:

  A、利用枚舉類型,來獲取當前步驟的上一步驟用戶控件實例和下一步驟用戶控件實例;

  B、當執行上一步或下一步操作時,通過public void SetWizard(WizardItem key, BaseWizard wizard)方法,保存當前步驟實例,其實也就保存了當前步驟的狀態信息,當再執行上一步,下一步時,從中取現來的用戶控件實例,也將保存有這些信息。

  4、主界面CS

  private WizardUtil wizardUtil;

  private WizardItem currentWizardKey;

  private BaseWizard currentWizard;

  這三個變量,第一個是輔助類的實例,currentWizardKey保存當前步驟枚舉,currentWizard保存當前步驟的用戶控件實例。

  初始化獲取第一個步驟:

   wizardUtil = new WizardUtil();

  currentWizardKey = WizardItem.Tip;

  currentWizard = wizardUtil.GetWizard(currentWizardKey);

  InitWizard();  

  InitWizard方法:

  private void InitWizard()
{
 MiddleSplit.Panel2.Controls.Clear();
 MiddleSplit.Panel2.Controls.Add(currentWizard);
 if (currentWizardKey == WizardItem.Tip)
 {
  btnPrev.Enabled = false;
 }
 else if (currentWizardKey == WizardItem.Complete)
 { 
  btnPrev.Enabled = false;
  btnNext.Enabled = false;
 }
 else
 {
  btnPrev.Enabled = true;
  btnNext.Enabled = true;
 }
}

  點擊上一步驟操作:

  //保存當前步驟信息
wizardUtil.SetWizard(currentWizardKey, currentWizard);
//獲取下一步驟信息
currentWizard = wizardUtil.GetWizard(ref currentWizardKey, WizardState.Next);
InitWizard();


  點擊下一步驟操作:

  //保存當前步驟信息
wizardUtil.SetWizard(currentWizardKey, currentWizard);
//獲取前一步驟信息
currentWizard = wizardUtil.GetWizard(ref currentWizardKey, WizardState.Previous);
InitWizard();


  代碼很簡單,但也確實能夠實現這些基本功能,只是粗略的做了一下基本的結構,也不確定這種做法能不能滿足復雜操作,一切還得靠大家自己看待了。

????? 源碼下載:/Files/licongjie/EcsPatch.rar

轉載于:https://www.cnblogs.com/licongjie/archive/2008/05/07/1186291.html

總結

以上是生活随笔為你收集整理的实战小技巧系列(4):WinForm简单步骤制作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。