精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91av中文字幕| 日韩免费视频一区| 麻豆md0077饥渴少妇| www.久久久久久| 国产精品三上| 日韩视频免费在线| 国产精品果冻传媒| 99riav视频一区二区| 一区二区三区不卡视频| 免费电影一区| 成 人片 黄 色 大 片| 丝袜亚洲另类欧美综合| 欧美日韩国产va另类| 国产一区二区三区四区五区六区| 羞羞视频在线观看一区二区| 欧美日韩亚洲91| 一级一片免费播放| 日韩av地址| 国产精品自拍在线| 国产精品久久久久久久久久99| 一区视频免费观看| 欧美伦理在线视频| 亚洲国产成人爱av在线播放| 手机免费看av网站| 日韩电影网站| 五月综合激情婷婷六月色窝| 咪咪色在线视频| 伦理片一区二区三区| 成人高清视频在线| 成人福利免费观看| 黄色av网站免费观看| 在线观看日韩av电影| 美女精品视频一区| 欧美性生交大片| 红桃视频在线观看一区二区| 亚洲的天堂在线中文字幕| 亚洲精品国产一区二区三区| 成人影院网站| 精品久久久久久久大神国产| 免费日韩在线观看| av在线看片| 17c精品麻豆一区二区免费| 六月婷婷久久| 神马久久久久| 99久久伊人网影院| 精品欧美一区二区三区久久久| www三级免费| 国产成人小视频| 亚洲一区二区三区777| 97国产精品久久久| 久国产精品韩国三级视频| 国产精品极品尤物在线观看 | 国产91色在线观看| 欧美日韩激情电影| 欧洲精品一区二区三区在线观看| 国产91在线视频观看| 色是在线视频| 色狠狠桃花综合| 日本在线视频www| 欧洲一级精品| 欧美色电影在线| 亚洲综合激情视频| 亚洲一区二区三区四区电影| 欧美成人vr18sexvr| 久久久久国产免费| 视频福利一区| 亚洲日本欧美日韩高观看| 久久日免费视频| 亚洲国产精品久久久天堂| 免费av一区二区| 久久这里只有精品国产| 日韩天天综合| 日韩av成人在线观看| 国产老熟妇精品观看| 日本h片在线观看| 天天亚洲美女在线视频| 免费黄色特级片| 精品九九久久| 精品国产不卡一区二区三区| 亚洲精品视频大全| 久久亚洲专区| 久久久亚洲国产| 亚洲精品91天天久久人人| 精品一区二区精品| 国产尤物91| 午夜在线小视频| 亚洲国产欧美日韩另类综合 | 看全色黄大色大片| 91在线超碰| 欧洲色大大久久| 91精产国品一二三| 国产精品嫩草影院在线看| 久久亚洲影音av资源网| 欧美h在线观看| 国产真实精品久久二三区| 国产在线精品二区| 亚洲图片88| 精品久久久久久久久中文字幕| 成年人小视频网站| 亚洲成人五区| 国产一区二区三区三区在线观看| 欧美黄色免费看| 日韩高清在线电影| 国产日韩一区欧美| 麻豆传媒视频在线观看免费| 婷婷六月综合网| 午夜一区二区视频| 国产亚洲一区二区三区不卡| 久久国产天堂福利天堂| 精人妻无码一区二区三区| 国产成人精品1024| 中文字幕中文字幕一区三区| 久久毛片亚洲| 亚洲福利在线视频| 久久久精品视频免费观看| 日韩高清在线观看| 玛丽玛丽电影原版免费观看1977| 性欧美猛交videos| 精品污污网站免费看| 中文字幕a在线观看| 亚洲一区二区日韩| 国产精品自在线| 日本一区视频| 亚洲一区二区三区中文字幕在线| 在线观看av网页| 天天操综合520| 欧美激情精品久久久久久大尺度| 中文字幕永久在线视频| 久久色中文字幕| 日本熟妇人妻xxxx| 精品一区二区三区中文字幕| 中文字幕亚洲欧美日韩高清| 精品人妻一区二区三区免费看 | 亚洲精品一级| 99久久精品免费看国产四区| 日本中文字幕在线看| 在线观看www91| 韩国女同性做爰三级| 久久黄色网页| 日本午夜精品一区二区| 亚洲免费福利| 精品亚洲一区二区三区四区五区| 久久免费视频6| 懂色av一区二区夜夜嗨| 超薄肉色丝袜足j调教99| 国产精品美女久久久久人| www.亚洲人.com| 一级片免费网站| 日韩毛片一二三区| 中文字幕剧情在线观看| 91精品国产成人观看| 亚洲aⅴ日韩av电影在线观看 | 原创真实夫妻啪啪av| 亚洲精品2区| 91视频最新| 电影在线高清| 欧美日产在线观看| 三级影片在线看| 国产福利91精品一区二区三区| 精品久久久无码人妻字幂| 天堂av一区| 97福利一区二区| 欧美一区二区视频| 欧美三级日韩三级| 黄色录像二级片| 国产99精品在线观看| 免费看国产一级片| 中文字幕亚洲影视| 国产日韩欧美黄色| 1区2区在线观看| 亚洲激情国产精品| 中文字幕+乱码+中文乱码91| 亚洲欧洲在线观看av| 国偷自产av一区二区三区麻豆| 国产伊人精品| 日本黑人久久| 国产精久久一区二区| 久久久久久久久久久免费 | 欧洲美女7788成人免费视频| 高清av在线| 日韩欧美成人激情| 国产小视频在线免费观看| 国产日韩精品久久久| 无套内谢丰满少妇中文字幕 | 91干在线观看| 一区二区三区视频网站 | 国产欧美婷婷中文| 天堂亚洲精品| 亚洲人成在线一二| 国产成人免费看一级大黄| 天天影视色香欲综合网老头| 自拍偷拍第9页| 99精品黄色片免费大全| 亚洲免费av一区| 亚洲人体偷拍| 在线亚洲美日韩| 久久动漫网址| 成人黄色大片在线免费观看| 182在线视频观看| 久久精品99久久久久久久久| 天堂在线资源网| 日韩一区二区三区在线观看| 精人妻无码一区二区三区| 亚洲一区二区三区四区在线免费观看 | 成人动态视频| 成人黄色激情网| 韩国成人动漫| 久久久久久有精品国产| 在线观看免费版| 精品视频在线播放色网色视频| 国产精品久久影视| 欧美中文一区二区三区| 亚洲黄色三级视频| 亚洲综合色区另类av| 黄色一级片一级片| 久久欧美一区二区| 日韩av无码一区二区三区不卡| 九九九久久久精品| 精品久久久久久久无码| 销魂美女一区二区三区视频在线| 91亚洲精品国产| 国产精品7m凸凹视频分类| 欧美一区免费视频| 欧美黑人巨大videos精品| 国产99视频精品免费视频36| 日日夜夜精品| 国产精品日韩电影| 日韩高清中文字幕一区二区| 2019中文字幕在线观看| 91超碰在线免费| 欧美日韩成人在线观看| av网址在线看| 超在线视频97| 成人午夜在线影视| 久久久国产精品一区| 色多多视频在线观看| 一区二区三欧美| 成黄免费在线| 一本色道久久88精品综合| 免费在线看v| 亚洲天堂免费在线| yw在线观看| 国产亚洲欧美日韩美女| 国产一级在线观看| 国产亚洲视频在线| 成人高清免费在线播放| 一区二区三区四区在线观看视频| 国际av在线| 中日韩美女免费视频网站在线观看 | 欧美自拍电影| 国产成人97精品免费看片| 视频在线日韩| 国产欧美精品va在线观看| 国产精品原创视频| 国产在线精品一区免费香蕉 | 亚洲国内高清视频| 飘雪影视在线观看免费观看| 亚洲欧美国产视频| 北条麻妃在线| 久久婷婷国产麻豆91天堂| 日日夜夜天天综合入口| 久久久久国产精品免费| 成入视频在线观看| 国产成人高清激情视频在线观看| 日韩另类视频| 亚洲影院在线看| 国产精品chinese在线观看| 精品在线视频一区二区| 精品不卡一区| 亚洲一区二区精品在线| 欧美精品二区| 超碰97人人射妻| 久久精品国产在热久久| 美女流白浆视频| 91丨porny丨蝌蚪视频| 极品蜜桃臀肥臀-x88av| 亚洲日本在线视频观看| 日本中文字幕免费观看| 欧美图区在线视频| 精品人妻无码一区二区色欲产成人| 欧美精品一区二区三区在线播放| 四虎在线免费看| 日韩在线观看你懂的| gogo久久| 国产一区二区香蕉| 国产调教精品| 中文字幕人成一区| 亚洲另类自拍| 在线能看的av网站| 95精品视频在线| 青青青在线免费观看| 日本高清成人免费播放| а√天堂资源在线| 尤物99国产成人精品视频 | 国产精品第一页在线| 日韩精品中文字幕吗一区二区| 免费观看成人在线| 欧美精选在线| 99草草国产熟女视频在线| 久久精品理论片| 一卡二卡三卡四卡| 一区二区三区国产豹纹内裤在线| 国产精品一区无码| 欧美xxxx在线观看| 婷婷五月在线视频| 欧美最顶级的aⅴ艳星| 亚洲成人黄色| 青少年xxxxx性开放hg| 久久深夜福利| 午夜视频在线观看国产| 亚洲三级电影网站| 亚洲中文一区二区| 亚洲精品乱码久久久久久金桔影视| 欧美高清视频| 国产精品黄色影片导航在线观看| 加勒比视频一区| 日韩一二区视频| 久久国产人妖系列| 成人无码av片在线观看| 黄色成人在线免费| 丰满少妇一级片| 精品国产欧美成人夜夜嗨| 欧美国产日韩电影| 裸体丰满少妇做受久久99精品 | 人妻有码中文字幕| 99麻豆久久久国产精品免费| 久久综合加勒比| 日韩女优电影在线观看| 久cao在线| 国产一区红桃视频| 久久一级电影| 亚洲天堂2018av| 国产精品人妖ts系列视频| 中文字幕永久在线| 亚洲天堂2020| 成人视屏在线观看| 任我爽在线视频精品一| 亚洲永久网站| 91精品人妻一区二区| 黑人巨大精品欧美一区二区三区| 人妻无码中文字幕免费视频蜜桃| 欧美黑人巨大xxx极品| 亚洲日本va| 久久亚洲国产成人精品无码区| 国产盗摄一区二区三区| 妺妺窝人体色www聚色窝仙踪| 日韩欧美中文字幕精品| 在线中文免费视频| 国产精品日韩一区二区| 91久久夜色精品国产九色| 亚洲一区二区三区四区五区六区| 午夜一区二区三区视频| 欧美日本网站| 国产玖玖精品视频| 五月久久久综合一区二区小说| 国产一区二区在线观看免费视频| 亚洲日本青草视频在线怡红院| 国产精品无码一区二区桃花视频| 伦理中文字幕亚洲| 91蝌蚪精品视频| 欧美日韩在线中文| 久久精品亚洲精品国产欧美kt∨ | 亚洲午夜精品一区二区| 精品一区二区三区在线观看| 91成人福利视频| 亚洲国产精品福利| 欧美男体视频| 三年中文高清在线观看第6集| 激情六月婷婷久久| 日韩av电影网| 伊是香蕉大人久久| 国产精品久一| 国产免费黄视频| 国产精品美女久久久久高潮| 99久久精品无免国产免费 | 99久久久国产精品免费调教网站| 异国色恋浪漫潭| 波多野结衣中文字幕一区| 免费观看日批视频| 久久精品久久久久久| 加勒比视频一区| 一女二男3p波多野结衣| 亚洲自拍偷拍麻豆| 邻家有女韩剧在线观看国语| 成人黄色av网| 国产精品久久久久毛片大屁完整版| 亚洲图片另类小说| 日韩精品一区二区在线| 欧美黑人粗大| 高清无码视频直接看| 久久精品人人做人人爽人人| a在线观看免费| 国产成人97精品免费看片| 国产一区亚洲| 国产jizz18女人高潮| 亚洲国产欧美一区二区三区同亚洲 | 日韩欧美在线国产| 先锋成人av| 视频一区二区三区免费观看| 不卡av在线免费观看|