国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在.NET框架中保留應用程序設置

2019-11-18 12:03:36
字體:
來源:轉載
供稿:網友

  簡介
  保存應用程序設置是一項常見任務。過去,我們通常將設置保存到 INI 文件或注冊表中。而在 Microsoft® .NET 框架中,我們多了另一種選擇,即將應用程序設置序列化到 xml 文件中,以便輕松地更新和檢索這些設置。Microsoft Visual Studio® .NET 使用 System.Configuration.AppSettingsReader 類讀取存儲在配置文件中的 DynamicPRoperties。但是,這些動態屬性在運行時是只讀的,因此您無法保留用戶所做的更改。本文將介紹如何序列化數據并將其寫入一個文件,以及如何讀取和反序列化該數據。存儲數據的方式和位置取決于要存儲的內容,本文將討論如何根據數據類型將其存儲到相應的位置。
  
  保存應用程序設置的前提
  Windows 窗體 application 類包含多個屬性,答應您輕松導航到注冊表或用戶數據文件夾的相應部分。要正確使用這些屬性,您必須設置 AssemblyCompany、AssemblyProdUCt 和 AssemblyVersion 屬性。
  
  這些屬性設置的值由 Control 類通過 CompanyName、ProductName 和 ProductVersion 屬性公開。
  
  下面是一個簡單的 Windows 窗體示例,其中設置了程序集屬性并將其顯示在 Label 中:
  
  ' Visual Basic
  Imports System
  Imports System.Windows.Forms
  Imports System.Reflection
  
  ' 設置程序集屬性。
  
  
  
  Public Class AboutDialogBox
  Inherits Form
  
  Public Sub New()
  ' 在 Label 中顯示程序集信息。
  Dim label1 As New Label()
  label1.Text = _
  Me.CompanyName + " " + _
  Me.ProductName + " 版本: " + _
  Me.ProductVersion
  label1.AutoSize = True
  Me.Controls.Add(label1)
  End Sub
  End Class
  
  //C#
  using System;
  using System.Windows.Forms;
  using System.Reflection;
  
  // 設置程序集屬性。
  [assembly: AssemblyCompany("Microsoft")]
  [assembly: AssemblyProduct("MyApplication")]
  [assembly: AssemblyVersion("1.0.1")]
  public class AboutDialogBox : Form
  {
  public AboutDialogBox()
  {
  // 在 Label 中顯示程序集信息。
  Label label1 = new Label();
  label1.Text = this.CompanyName + " "
  + this.ProductName + " 版本: "
  + this.ProductVersion;
  label1.AutoSize = true;
  this.Controls.Add(label1);
  }
  
  [STAThread]
  static void Main()
  {
  Application.Run(new AboutDialogBox());
  }
  }
  
  使用注冊表存儲數據
  假如數據對應用程序而言非常敏感或十分重要,您可能不希望只簡單地序列化數據;因為假如這樣,任何人都可以使用文本編輯器查看或編輯這些數據;而注冊表可以限制對數據的訪問。注冊表為應用程序和用戶設置提供了強大的存儲能力。多數備份程序會自動備份注冊表設置。當您將信息放到注冊表中的正確位置后,在存儲設置時可自動避開用戶。雖然用戶可以編輯注冊表,但他們通常不會這樣做,這便使得您的設置更加穩定。總之,只要遵守使用注冊表的 Microsoft Windows® 徽標原則,注冊表將是存儲應用程序設置的理想位置。
  
  要寫入注冊表,您的應用程序需要 Create 和 Write 注冊表權限;要讀取注冊表,則需要 Read 權限。有關使用注冊表項的具體信息,請參閱 .NET 框架 SDK 文檔中有關 Microsoft.Win32.RegistryKey 類的 GetValue 和 SetValue 方法的文檔以及 System.Security.Permissions.RegistryPermissionaccess 枚舉文檔。
  
  要將信息保存到注冊表,請使用 Application 類的 UserAppDataRegistry 或 CommonAppDataRegistry 屬性。這些屬性將根據用戶類型返回一個可用于存儲應用程序數據的 RegistryKey 對象:
  
  UserAppDataRegistry 屬性返回的注冊表項可用于存儲每個用戶的漫游數據(與計算機無關的特定用戶設置);注冊表項的形式為 HKEY_CURRENT_USER/Software/[Control.CompanyName]/[Control.ProductName]/[Control.ProductVersion]。
  CommonAppDataRegistry 屬性返回的注冊表項可用于存儲計算機的非特定用戶的、非漫游數據;注冊表項的形式為 HKEY_LOCAL_MACHINE/Software/[Control.CompanyName]/[Control.ProductName]/[Control.ProductVersion]。
  這兩種屬性都是只讀屬性,它們返回的 RegistryKey 對象具有多種方法,可用于讀取、更新或創建注冊表項和值。
  
  將數據保存到注冊表
  下面的示例在關閉窗體時,假如連接字符串被更改,則將連接字符串保存到注冊表中。
  
  ' Visual Basic
  Private appSettingsChanged As Boolean
  Private connectionString As String
  
  Private Sub Form1_Closing(sender As Object,
  e As CancelEventArgs) Handles MyBase.Closing
  If appSettingsChanged Then
  Try
  ' 假如連接字符串已更改,則將其保存到注冊表中。
  Application.UserAppDataRegistry.SetValue("ConnString", _
  connectionString)
  Catch ex As Exception
  MessageBox.Show(ex.Message )
  End Try
  End If
  End Sub
  
  // C#
  private bool appSettingsChanged;
  private string connectionString;
  
  private void Form1_Closing(object sender, CancelEventArgs e)
  {
  if(appSettingsChanged)
  {
  try
  {
  // 假如連接字符串已更改,則將其保存到注冊表中。
  Application.UserAppDataRegistry.SetValue("ConnString",
  connectionString);
  }
  catch(Exception ex)
  {
  MessageBox.Show(ex.Message );
  }
  }
  }
  
  從注冊表檢索數據
  下面的示例在加載窗體時,從注冊表中檢索連接字符串。
  
  ' Visual Basic
  Private appSettingsChanged As Boolean
  Private connectionString As String
  
  Private Sub Form1_Load(sender As Object,
  e As EventArgs) Handles MyBase.Load
  Try
  ' 從注冊表中獲取連接字符串。
  If Not (Application.UserAppDataRegistry.GetValue("ConnString") _
  Is Nothing) Then
  connectionString = _
  Application.UserAppDataRegistry.GetValue( _
  "ConnString").ToString()
  statusBar1.Text = "連接字符串: " + connectionString
  End If
  Catch ex As Exception
  MessageBox.Show(ex.Message)
  End Try
  End Sub
  
  // C#
  private bool appSettingsChanged;
  private string connectionString;
  
  private void Form1_Load(object sender, EventArgs e)
  {
  try
  {
  // 從注冊表中獲取連接字符串。
  if(Application.UserAppDataRegistry.GetValue("ConnString") != null)
  {
  connectionString =
  Application.UserAppDataRegistry.GetValue(
  "ConnString").ToString();
  statusBar1.Text = "連接字符串: " +
  connectionString;
  }
  }
  catch(Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  }
  
  創建自定義應用程序配置類
  本文介紹的應用程序配置類將其實例序列化為 XML。序列化是將對象或對象圖轉換為線性字節序列以便存儲或傳輸到其他位置的過程。反序列化是接收所存儲或傳輸的信息并從中重新創建對象的過程。您可以將對象序列化為文本(XML 是具有分層結構的文本)或二進制格式。有關序列化的具體信息,請參閱 .NET 框架開發人員指南中的 Serializing Objects。
  
  從 Control 派生出來的 Windows 窗體類不能輕易序列化為 XML,因為它們包含具有動態狀態(例如窗口句柄 [HWND])的對象。由于不能輕易完全序列化控件,并且通常并不需要保留由控件公開的每個屬性,因此應當創建一個小型的、可序列化為 XML 的類來存儲所需要的屬性值。例如,您可能只需要存儲窗體的 BackColor、用戶保存文件的最后一個目錄或上次關閉窗體時窗體的 Location。要寫入或創建 XML 文件,您的應用程序需要 Write 權限;要讀取 XML 文件,則需要 Read 權限。有關具體信息,請參閱 .NET 框架 SDK 中有關 StreamWriter 構造函數的文檔以及 System.Security.Permissions.FileIOPermissionAccess 枚舉文檔。某些類型需要先經過轉換,然后才能序列化為 XML。例如,要將 System.Drawing.Color 序列化為 XML,必須先使用 ToArgb 方法將其轉換為整數。類型轉換器也可用于將類型轉換為字符串表示。有關類型轉換器的具體信息,請參閱 .NET 框架 SDK 文檔中的 TypeConverter 類文檔和 Implementing a Type Converter。
  
  Application 類中的幾個屬性提供了可用于存儲應用程序數據的應用程序存儲路徑:
  
  UserAppDataPath 屬性用于存儲每個用戶的漫游數據(與計算機無關的特定用戶設置);路徑的形式為 [UserName]/Application Data/[Control.CompanyName]/[Control.ProductName]/[Control.Produc

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 故城县| 桦南县| 滨海县| 静宁县| 民乐县| 清远市| 和顺县| 长兴县| 沐川县| 固始县| 大埔区| 渭源县| 黔西县| 来凤县| 资源县| 金乡县| 庆阳市| 沛县| SHOW| 天长市| 贵港市| 克山县| 稷山县| 全南县| 临湘市| 涿鹿县| 枣庄市| 嘉鱼县| 太白县| 宜兰市| 运城市| 巍山| 景洪市| 威海市| 敖汉旗| 松滋市| 武威市| 天峻县| 克山县| 红安县| 五峰|