精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何實現C#保存窗體狀態

開發 后端
本文通過利用與注冊表的信息交互和利用Settings(設置)實現c#保存窗體狀態(大小和位置)的方法,供大家參考。

當窗體大小和位置被用戶更改后,如何保存更改后的狀態,確保用戶再次打開窗體時的狀態和最后一次更改保持一致?下面介紹兩種有代表性的方法:

c#保存窗體狀態——利用與注冊表的信息交互實現

在《Pro.dot.NET.2.0.Windows.Forms.and.Custom.Controls.in.C.Sharp》書上介紹了這種方法,具體的可以參見這本書,有電子版下載的。定義一個類FormPositionHelper用來設置和保存當前窗體的大小和位置信息。類設計代碼如下:

  1. using Microsoft.Win32;//這個需加上  
  2.  
  3. .......  
  4.  
  5.     class FormPositionHelper  
  6.     {  
  7.         // 在HKEY_CURRENT_USER 設置注冊表的路徑  
  8.         public static string RegPath = @"Software\App\";  
  9.         public static void SaveSize(System.Windows.Forms.Form frm)  
  10.         {  
  11.             //Create or retrieve a reference to a key where the settings  
  12.             //will be stored.  
  13.             RegistryKey key;  
  14.             key = Registry.LocalMachine.CreateSubKey(RegPath + frm.Name);  
  15.             key.SetValue("Height", frm.Height);  
  16.             key.SetValue("Width", frm.Width);  
  17.             key.SetValue("Left", frm.Left);  
  18.             key.SetValue("Top", frm.Top);  
  19.         }  
  20.         public static void SetSize(System.Windows.Forms.Form frm)  
  21.         {  
  22.             RegistryKey key;  
  23.             key=Registry.LocalMachine.OpenSubKey(RegPath+frm.Name);  
  24.             if(key!=null)  
  25.             {  
  26.             frm.Height=(int)key.GetValue("Height");  
  27.             frm.Width=(int)key.GetValue("Width");  
  28.             frm.Left=(int)key.GetValue("Left");  
  29.             frm.Top=(int)key.GetValue("Top");  
  30.             }  
  31.         }  
  32.      } 

然后分別在窗體第一次加載和關閉之前調用上述類中的兩個方法,具體如下:

  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     FormPositionHelper.SetSize(this);  
  4. }  
  5.  
  6. private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
  7. {  
  8.  
  9.    //必須加上這個判斷,否則窗體最小化后無法恢復和還原了  
  10.  
  11.     if (this.WindowState != FormWindowState.Minimized)  
  12.         FormPositionHelper.SaveSize(this);  

c#保存窗體狀態——利用Settings(設置)完成

這個是在codeproject上講解到的另一種方法,地址是http://www.codeproject.com/KB/cs/UserSettings.aspx  當然是英文的啦~

注意:在Settings.settings文件中定義配置字段。把作用范圍定義為:User則運行時可更改,Applicatiion則運行時不可更改。當設置scope為User時他的配置放在 C:\Documents and Settings\LocalService\Local Settings\Application Data\在這個目錄下或子目錄user.config 配置文件中。 

具體實現方法如下:

a.打開項目屬性-》設置 如下圖:

c#保存窗體狀態  

b.在需要保存狀態的窗體頂部添加using CtrlStudy.Properties;//CtrlStudy為項目名稱

c.代碼設計: 

  1. private void Form1_Load(object sender, EventArgs e)  
  2.  {  
  3.      if (Settings.Default.WindowLocation != null)  
  4.      {  
  5.          this.Location = Settings.Default.WindowLocation;  
  6.      }  
  7.      if (Settings.Default.WindowSize != null)  
  8.      {  
  9.          this.Size = Settings.Default.WindowSize;  
  10.      }  
  11.  }  
  12.  
  13.  private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
  14.  {  
  15.      Settings.Default.WindowLocation = this.Location;  
  16.      if (this.WindowState == FormWindowState.Normal)  
  17.      {  
  18.          Settings.Default.WindowSize = this.Size;  
  19.      }  
  20.      else 
  21.      {  
  22.          Settings.Default.WindowSize = this.RestoreBounds.Size;  
  23.      }  
  24.      if (this.WindowState != FormWindowState.Minimized)  
  25.          Settings.Default.Save();//使用Save方法保存更改  
  26.  } 

需要的時候可以采用Settings.Default.Reset()方法將屬性值還原為默認值,即在上圖中手動設置的值。

上面介紹到的方法雖然能夠解決我們所提出的問題,但是不夠理想,對窗體的兩個特殊狀態(最大化和最小化)實則做了偷懶處理,即對于非正常狀態下的狀態更改不予以保存。所以解決不了窗體在最小化時能夠還原和最大化時能夠最小的轉換處理。

針對這個問題,提出一種新的解決方案,即采用WIN32中的GetWindowPlacement()和SetWindowPlacement()方法,兩個方法的定義大家可以查下資料,這里就不再作介紹了。當然這個方法也是我在前面提到的電子書《Pro.dot.NET.2.0.Windows.Forms.and.Custom.Controls.in.C.Sharp》上發現的,覺得不錯,趕緊總結總結記錄下來了。順道在這里推薦在下這本關于控件開發的書,有VB和C#版本的,它從控件、窗體的基礎講起,直到向大家講解如何開發一個滿足自己需求的控件,當然里面也介紹到了控件和組件編程的其他知識,還是很不錯的一本書,可惜只有英文的啦,目前正在研讀中。。。。

轉入正題,同前,合理應用上面GetWindowPlacement()和SetWindowPlacement()方法設計設置和保存窗體狀態的類如下:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Drawing;  
  5. using System.Runtime.InteropServices; //注意這幾個命名空間的引入  
  6. using Microsoft.Win32;  
  7. using System.IO;  
  8. using System.Runtime.Serialization.Formatters.Binary;  
  9.  
  10. namespace CtrlStudy  
  11. {  
  12.     class FormPositionHelper2  
  13.     {  
  14.         [DllImport("user32.dll")]  
  15.         private static extern bool GetWindowPlacement(IntPtr handle, ref ManagedWindowPlacement placement);  
  16.  
  17.         [DllImport("user32.dll")]  
  18.         private static extern bool SetWindowPlacement(IntPtr handle, ref ManagedWindowPlacement placement);  
  19.  
  20.         [Serializable]   //必須加上,否則后面會提示為非可序列化標記  
  21.         public struct ManagedWindowPlacement  
  22.         {  
  23.             public int length;  
  24.             public int flags;  
  25.             public int showCmd;  
  26.             public Point  ptMinPosition;  
  27.             public Point ptMaxPosition;  
  28.             public Rectangle rcNormalPosition;  
  29.         }  
  30.  
  31.         public static string RegPath = @"Software\App\";  
  32.         public static void SaveSize(System.Windows.Forms.Form frm)  
  33.         {  
  34.             RegistryKey key;  
  35.             key = Registry.LocalMachine.CreateSubKey(RegPath + frm.Name);  
  36.                       // Get the window placement.  
  37.             ManagedWindowPlacement placement = new ManagedWindowPlacement();  
  38.             GetWindowPlacement(frm.Handle, ref placement);  
  39.             // Serialize it.  
  40.             MemoryStream ms = new MemoryStream();  
  41.             BinaryFormatter f = new BinaryFormatter();  
  42.             f.Serialize(ms, placement);  
  43.             // Store it as a byte array.  
  44.             key.SetValue("Placement", ms.ToArray());  
  45.         }  
  46.  
  47.         public static void SetSize(System.Windows.Forms.Form frm)  
  48.         {  
  49.             RegistryKey key;  
  50.             key = Registry.LocalMachine.OpenSubKey(RegPath + frm.Name);  
  51.             if (key != null)  
  52.             {  
  53.                 MemoryStream ms = new MemoryStream((byte[])key.GetValue("Placement"));  
  54.                 BinaryFormatter f = new BinaryFormatter();  
  55.                 ManagedWindowPlacement placement = (ManagedWindowPlacement)  
  56.                   f.Deserialize(ms);  
  57.                 SetWindowPlacement(frm.Handle, ref placement);  
  58.             }  
  59.         }  
  60.     }  

這個方法比較完善,其實序列在很早就提出來了。有時間還得專門研究研究這個序列化的問題,后面還會不斷研究并總結的。

好了,C#保存窗體狀態的方法就給大家介紹到這里。

【編輯推薦】

  1. C#實現多語言界面程序的方法介紹
  2. 介紹C#構造函數的使用方法
  3. C#多態性的概念及其應用
  4. 淺析C# treeview控件的使用方法
  5. 總結C#獲取當前路徑的7種方法
責任編輯:book05 來源: 新浪博客
相關推薦

2009-08-10 14:23:39

C# Setting

2009-08-26 11:07:36

C#打印窗體

2009-08-25 09:19:01

C#實現窗體顯示

2009-09-07 05:24:22

C#窗體繼承

2009-09-07 03:44:50

C#窗體間傳值

2009-08-20 10:10:55

C#透明窗體

2009-09-07 05:31:39

C#窗體關閉事件

2009-07-16 10:58:11

C#枚舉

2009-08-13 10:42:31

C#窗體拖動事件

2009-09-07 06:07:46

C#窗體設計

2009-09-07 06:31:32

C#窗體移動

2009-08-28 15:58:54

C#窗體里調用

2009-09-07 06:48:13

C#透明窗體

2009-09-07 04:19:56

C#窗體事件

2009-09-07 04:56:52

C#模式窗體

2009-09-07 05:10:52

C#模式窗體

2019-10-08 11:10:18

React自動保存前端

2009-08-19 14:29:33

C#代理

2009-08-26 15:09:57

C# Hook

2009-09-07 06:18:57

C#窗體設計器
點贊
收藏

51CTO技術棧公眾號

国产无套内射又大又猛又粗又爽| 在线观看的毛片| 无码精品人妻一区二区三区影院| 欧美日韩免费观看一区=区三区| 欧美精品一区二区久久久| 国产一区二区三区精彩视频| melody高清在线观看| 国产一区二区精品久久99| 91精品国产高清自在线| 国产又黄又粗又猛又爽的| 97视频一区| 在线观看一区日韩| 丁香六月激情网| 国产精品无码2021在线观看| 国产乱码精品一区二区三| 538国产精品一区二区免费视频| 免费看的黄色录像| 国产成人在线中文字幕| 欧美日韩国产一级二级| 青青草国产精品视频| 老司机精品视频在线观看6| 久久影音资源网| 99re在线观看| 中文字幕有码无码人妻av蜜桃| 亚洲区一区二| 超碰97人人做人人爱少妇| 免费看91的网站| 免费电影一区二区三区| 精品久久久久久综合日本欧美 | 亚洲国产无码精品| 一区二区三区视频播放| 欧美日本不卡视频| 另类小说第一页| 女生影院久久| 狠狠躁天天躁日日躁欧美| 日韩a级黄色片| 日本三级视频在线播放| 国产视频一区在线播放| 久久久婷婷一区二区三区不卡| www.黄色av| 韩国精品免费视频| 国产精品美女呻吟| 午夜一区二区三区四区| 久久精品电影| 国产91精品在线播放| 亚洲午夜18毛片在线看| 亚洲国产高清一区二区三区| 欧美国产亚洲精品久久久8v| 老妇女50岁三级| 欧美激情综合色综合啪啪| 另类色图亚洲色图| 国产免费无码一区二区视频| 欧美日韩国产精品一区二区亚洲| 欧美大荫蒂xxx| 国产一级在线播放| 在线国产精品一区| 欧美激情免费观看| 国产精品500部| 性色一区二区| 国产精品av电影| 中文字幕第99页| 狠狠色丁香久久婷婷综合_中| 成人免费网站在线看| 国产裸体永久免费无遮挡| 韩国精品在线观看| 国产精品高清一区二区三区| 十八禁一区二区三区| 99久久精品免费观看| 久久综合福利| 无遮挡动作视频在线观看免费入口| 中文字幕乱码久久午夜不卡| 综合视频免费看| 在线āv视频| 精品国产福利在线| 中文字幕第21页| 国产日韩欧美中文在线| 精品国产伦一区二区三区观看体验 | 奇米精品一区二区三区在线观看 | 九九热精品视频| 国产午夜精品无码| 肉丝袜脚交视频一区二区| 国产自摸综合网| 日韩中文字幕综合| 久久久久国产精品厨房| 一本久道久久综合狠狠爱亚洲精品| 久久精品视频免费看| 午夜欧美大尺度福利影院在线看| av免费中文字幕| 97精品资源在线观看| 亚洲精品一线二线三线| 久久视频精品在线观看| 欧美日韩99| 国产精品福利在线| 亚洲av无码国产精品永久一区 | 精品国产伦一区二区三区观看体验| 国产一级二级在线观看| 区一区二视频| 久久久亚洲精选| 中文字幕人妻一区二区在线视频 | 免费又黄又爽又色的视频| 亚洲欧美日韩一区在线观看| 亚洲999一在线观看www| 久久久久久青草| 亚洲一二三区不卡| 视频二区在线播放| 丁香一区二区| 久久国产精彩视频| 久久精品视频2| 粉嫩一区二区三区性色av| 日韩精品最新在线观看| 精灵使的剑舞无删减版在线观看| 欧美三级日韩三级国产三级| 国产精品无码电影| 欧美午夜国产| 国产日韩欧美成人| 久久精品国产亚洲a∨麻豆| 一区二区在线观看免费| 亚洲欧美自拍另类日韩| 亚洲瘦老头同性70tv| 欧美激情一级二级| 国产又粗又大又爽| 亚洲国产精品av| 国产福利视频在线播放| 精品自拍偷拍| 久久久久久国产精品久久| 97超碰国产在线| 日本一区二区三区在线不卡 | 韩国女主播成人在线观看| 日本一区免费观看| 三级中文字幕在线观看| 亚洲成人av片在线观看| 青青草精品在线视频| 黄网站免费久久| 亚洲资源在线网| 国产精品一区二区免费福利视频| 亚洲人成电影网站色www| 久久不卡免费视频| 成人av高清在线| 国产免费一区二区视频| 中文字幕一区图| 欧美夫妻性生活xx| 国内老熟妇对白hdxxxx| 亚洲乱码国产乱码精品精的特点| 亚洲 国产 图片| 91亚洲成人| 91精品视频在线播放| 免费黄色网页在线观看| 欧美精品丝袜中出| 日韩三级久久久| 国产一区在线看| 国产人妻人伦精品| 伊人久久大香线蕉av超碰| 色综合久久88| 天天干免费视频| 色综合视频在线观看| 精品成人无码一区二区三区| 老司机免费视频一区二区| 少妇熟女一区二区| 51亚洲精品| 91禁国产网站| 91激情在线| 日韩一区二区在线观看| 亚洲精品在线观看av| 99久久精品一区| 欧美激情精品久久久久久小说| 欧美日韩性在线观看| 成人欧美一区二区三区在线湿哒哒| 高潮毛片在线观看| 亚洲第一精品夜夜躁人人爽| 在线免费黄色av| 国产精品美日韩| 18禁一区二区三区| 亚洲美女一区| 亚洲狠狠婷婷综合久久久| 国产aa精品| 久久频这里精品99香蕉| 国产高清视频在线观看| 欧美一区二区福利在线| 日韩精品――中文字幕| 欧美国产一区二区在线观看| 999热精品视频| 一区二区三区四区五区在线| 亚洲成人18| 加勒比久久高清| 国产精品自产拍高潮在线观看| 中文在线观看免费| 亚洲奶大毛多的老太婆| a天堂在线视频| 日韩欧美国产一区二区| 成人免费毛片xxx| 91毛片在线观看| aaa一级黄色片| 亚洲专区免费| 日本国产中文字幕| 国产欧美日韩免费观看| 91久久精品国产91久久性色tv| 亚洲精品福利电影| 欧美巨大黑人极品精男| 黄色免费在线播放| 精品三级在线观看| 在线观看免费黄色小视频| 午夜私人影院久久久久| 日韩在线一卡二卡| 久久精品亚洲一区二区三区浴池| 中文字幕亚洲日本| 免费成人在线观看| 97超碰青青草| 伊人久久亚洲热| 国产又黄又爽免费视频| 久久91麻豆精品一区| 国产传媒一区二区三区| 日韩精品第二页| 日本高清+成人网在线观看| 日本乱理伦在线| 爱福利视频一区| 福利成人在线观看| 亚洲韩国日本中文字幕| 99国产精品久久久久99打野战| 欧美亚男人的天堂| 五月激情六月丁香| 亚洲va国产va欧美va观看| 欧美国产在线看| 日韩一区在线免费观看| 日韩视频在线观看免费视频| 91丨porny丨在线| 国产精久久久久| 国产激情一区二区三区四区| 成人性生交免费看| 日本午夜精品视频在线观看| wwwxxx黄色片| 性欧美暴力猛交另类hd| 大肉大捧一进一出好爽视频| 日韩一区二区久久| 三上悠亚久久精品| 亚洲国产日本| 天堂…中文在线最新版在线| 亚洲一级高清| 亚洲熟妇无码另类久久久| 亚洲激情网址| 9久久9毛片又大又硬又粗| 在线不卡视频| 热99这里只有精品| 日韩午夜在线| 凹凸国产熟女精品视频| 久久一区视频| 无限资源日本好片| 日本色综合中文字幕| 免费看涩涩视频| 国产曰批免费观看久久久| 日本高清免费观看| 国产精品亚洲人在线观看| 91亚洲一线产区二线产区 | 国产呦小j女精品视频| 91丨九色porny丨蝌蚪| 大又大又粗又硬又爽少妇毛片| 久久人人爽人人爽| 高清国产在线观看| 国产精品国产三级国产专播品爱网| 中文字幕91视频| 亚洲精品亚洲人成人网在线播放| 久久久久久激情| 精品成人久久av| 超碰在线97观看| 91精品啪在线观看国产60岁| 亚洲av综合色区无码一二三区 | 黄色亚洲精品| 91黄色小网站| 另类小说视频一区二区| 成人一区二区三区仙踪林| caoporn国产精品| 亚洲女优在线观看| 亚洲欧洲精品一区二区三区不卡 | 亚洲无线视频| 国产a级片免费观看| 韩国av一区二区三区在线观看| 麻豆av免费看| 欧美国产精品v| 精品少妇一二三区| 91久久久免费一区二区| 999av视频| 亚洲欧美中文日韩在线| 黄色网在线播放| 国产91精品不卡视频| 久久免费影院| 国产麻豆一区二区三区在线观看| 国产欧美日韩影院| 亚洲av首页在线| 国产精品主播| 69久久精品无码一区二区| 91视频91自| 男女做暖暖视频| 欧美性xxxxxx| www.97av.com| 亚洲一二在线观看| 黄色影院在线看| 国产精品中文在线| 台湾亚洲精品一区二区tv| 2021狠狠干| 日韩av电影天堂| 先锋资源av在线| 亚洲欧美偷拍卡通变态| 69视频免费看| 亚洲国产第一页| 国产网站在线免费观看| 青青久久av北条麻妃海外网| 亚洲国产aⅴ精品一区二区| 日韩精品极品视频在线观看免费| 1000部精品久久久久久久久| 两性午夜免费视频| 欧美国产日产图区| 久久久国产精品成人免费| 51午夜精品国产| gogogo高清在线观看免费完整版| 韩日欧美一区二区| 欧美第一在线视频| 天堂社区 天堂综合网 天堂资源最新版| 国产综合视频| 97超碰人人看| 亚洲色图欧美偷拍| 欧美三级网站在线观看| 精品视频在线播放| 国产美女高潮在线观看| 99久久久久国产精品免费| 无码一区二区三区视频| 亚洲这里只有精品| 国产清纯白嫩初高生在线观看91| 久久久久久久久久影院| 亚洲福利视频二区| 青青在线视频| av一区二区三区免费| 国产精品成人一区二区不卡| 牛夜精品久久久久久久| 欧美国产视频在线| 无码视频一区二区三区| 亚洲美女性生活视频| 中文字幕影音在线| 久久久久资源| 丝袜美腿亚洲综合| 国产免费看av| 色久综合一二码| 成人免费高清在线播放| 国产精品旅馆在线| 第一sis亚洲原创| 亚洲 激情 在线| 中文字幕在线不卡视频| 国产一区二区在线不卡| 久久亚洲精品成人| 日本综合精品一区| 日本黄大片在线观看| 成人免费毛片片v| 国产成人在线免费观看视频| 亚洲国产精品久久久久秋霞不卡| 毛片电影在线| 欧美一区激情视频在线观看| 久久综合九色| 懂色av蜜臀av粉嫩av永久| 欧美一区二区在线观看| 男女羞羞视频在线观看| 国产精品一区二区欧美| 久久国产福利| 色一情一交一乱一区二区三区| 欧美日韩一区不卡| av中文字幕在线观看| 国产精品毛片一区视频| 亚洲一区二区三区四区五区午夜| 四虎永久免费影院| 欧美天堂一区二区三区| 成人福利片网站| 精品一卡二卡三卡四卡日本乱码 | 青青a在线精品免费观看| 久久中文亚洲字幕| 久久久久久无码精品人妻一区二区| 亚洲成人在线免费| 精品影院一区| 91在线视频九色| 亚洲伊人网站| 日韩欧美综合视频| 亚洲精品久久久久久久久久久久久 | 亚洲你懂的在线视频| 免费观看黄一级视频| 亲子乱一区二区三区电影| 国产精品成人a在线观看| 超碰caoprom| 欧美日韩国产小视频| www.综合网.com| 色视频一区二区三区| 国产成人综合网| 在线免费观看av网址| 美女久久久久久久| 伊人成综合网yiren22| 国产女同无遮挡互慰高潮91| 欧美日韩亚洲视频| caopo在线| 日本一区二区三区视频在线观看 | 后入内射无码人妻一区| 精品欧美黑人一区二区三区| 福利精品一区| 成人免费在线小视频| 亚洲激情男女视频| 97最新国自产拍视频在线完整在线看|