public class SettingHelper
{
//WPF下配置文件路径
public static readonly string SettingFilePath = AppDomain.CurrentDomain.BaseDirectory + "\\Setting.ini";
//使这个构造函数私有化
private SettingHelper()
{ }
//静态函数设为只读属性
private static class Instance
{
internal static readonly SettingHelper Setting = new SettingHelper();
} public static SettingHelper GetInstance()
{
return Instance.Setting;
} #region API函数声明 [DllImport("kernel32")]//返回0表示失败,非0为成功
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")]//返回取得字符串缓冲区的长度
private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); #endregion #region 读Ini文件 public string ReadIniData(string section, string key)
{
return ReadIniData(section, key, string.Empty);
} public string ReadIniData(string section, string key, string defaultValue)
{
if (File.Exists(SettingFilePath))
{
StringBuilder s = new StringBuilder(); GetPrivateProfileString(section, key, defaultValue, s, , SettingFilePath); return s.ToString();
}
else
{
return String.Empty;
}
} #endregion //写Ini文件
public bool WriteIniData(string section, string key, string value)
{
if (File.Exists(SettingFilePath))
{
long OpStation = WritePrivateProfileString(section, key, value, SettingFilePath); if (OpStation == )
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
} //给窗体初始状态赋值
private string windowState;
public WindowState WindowState
{
get
{
if (string.IsNullOrWhiteSpace(windowState))
{
SettingHelper st = SettingHelper.GetInstance(); windowState = st.ReadIniData("WPF", "WindowState");
} if (string.IsNullOrWhiteSpace(windowState))
{
windowState = ((int)System.Windows.WindowState.Normal).ToString();
} return (WindowState)Convert.ToInt32(windowState);
} set
{
windowState = ((int)value).ToString(); SettingHelper st = SettingHelper.GetInstance(); //SettingHelper.GetInstance 获取SettingHelper的实例 st.WriteIniData("WPF", "WindowState", windowState);
}
} //给窗体初始大小赋值
private string left;
public double Left
{
get
{
if (string.IsNullOrWhiteSpace(left)) //IsNullOrWhiteSpace判断是否为空的字符串或空格
{
SettingHelper st = SettingHelper.GetInstance(); left = st.ReadIniData("WPF", "Left");
} if (string.IsNullOrWhiteSpace(left))
{
left = "";
} return Convert.ToDouble(left);
} set
{
left = value.ToString(); SettingHelper st = SettingHelper.GetInstance(); st.WriteIniData("WPF", "Left", left);
}
} private string top; public double Top
{
get
{
if (string.IsNullOrWhiteSpace(top))
{
SettingHelper st = SettingHelper.GetInstance(); top = st.ReadIniData("WPF", "Top");
} if (string.IsNullOrWhiteSpace(top))
{
top = "";
} return Convert.ToDouble(top);
} set
{
top = value.ToString(); SettingHelper st = SettingHelper.GetInstance(); st.WriteIniData("WPF", "Top", top);
}
}
}

WPF手写代码配置文件——单例的更多相关文章

  1. ClownFish:比手写代码还快的通用数据访问层

    http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...

  2. 手写代码自动实现自动布局,即Auto Layout的使用

    手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...

  3. 2019前端面试系列——JS高频手写代码题

    实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...

  4. 前端面试手写代码——模拟实现new运算符

    目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...

  5. 如果选择构建ui界面方式,手写代码,xib和StoryBoard间的博弈

    代码手写UI这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用. 大型多人合作项目使用代码构建UI,主要是看中纯代码在版本管理时的优势,检查追踪改动以及进行代码合并相对容易一些. 另外,代 ...

  6. .netER的未来路,关于基础是否重要和应该自己手写代码吗?

    http://www.cnblogs.com/onepiece_wang/p/5558341.html#!comments 引用"基础知识的学习,一开始可能是背书,但是在后续若干年的工作过程 ...

  7. 手写代码UI,xib和StoryBoard间的的优劣比较

    在UI制作方面,逐渐分化三种主要流派:使用代码手写UI:使用单个xib文件组织viewController或者view:使用StoryBoard来通过单个或很少的几个文件构建UI.三种方式各有优劣,也 ...

  8. UI到底应该用xib/storyboard完成,还是用手写代码来完成?

    UI到底应该用xib/storyboard完成,还是用手写代码来完成? 文章来源:http://blog.csdn.net/libaineu2004/article/details/45488665 ...

  9. Appium初始化设置:手写代码连接手机、appium-desktop连接手机

    一.包名获取的三种方式 1)找开发要2)mac使用命令:adb logcat | grep START win使用命令:adb logcat | findstr START 或者可以尝试使用第3条命令 ...

随机推荐

  1. 创建线程的两种方式比较Thread VS Runnable

    1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 public class MyThread extends Thread{ @Override public vo ...

  2. QtSQL学习笔记(3)- 执行SQL语句

    QSqlQuery类提供了一个用于执行SQL语句和浏览查询的结果集的接口. QSqlQueryModel和QSqlTableModel类提供了一个用于访问数据库的高级接口,这将在下一节介绍.如果你不熟 ...

  3. mysql---union的用法

    union的作用很简单用来合并两条sql的结果集 语法: SQL1 UNION SQL2 现有一张价格表 要求:求出价格低于2000和价格高于3000的商品,不能用or和not between--an ...

  4. 顺序表 C++模板实现

    #include <iostream> using namespace std; template <typename T> class list{ private: int ...

  5. C++ const修饰函数、函数参数、函数返回值

    const修饰函数 在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数.为什么不能调用非const函数?因为非const函数可能修改数据成员,cons ...

  6. C#与.NET

    1 .NET Framework的核心是其运行库执行环境,即公共语言运行库(CLR)或.NET运行库,一般将CLR控制下运行的代码称为托管代码(managed code). 在CLR在执行编写好的代码 ...

  7. Windows phone 8 安装在 VMWare上错误的各种解决方案

    http://windowsasusual.blogspot.jp/2013/01/how-to-launch-windows-phone-8-emulator.html Hardware requi ...

  8. Java遍历所有网卡打印对应IP

    import java.util.Enumeration; import java.net.*; public class Test { /** * @param args */ public sta ...

  9. Java中的异常处理机制的简单原理和应用

    异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间.地点.人物.情节等信息,可以用一个对象来表示,Java使用面向对象的方式 ...

  10. 常用面试sql语句

    1.编写一条sql语句,要修改一个字段的俩个值,比如把字段sex中的男改为女,女改为男. update m set m=(case when m='男' then '女' else '男' end) ...