WPF手写代码配置文件——单例

   public class SettingHelper
    {
        //WPF下配置文件路径
        public static readonly string SettingFilePath = AppDomain.CurrentDomain.BaseDirectory + "\\Setting.ini";

        private static class Instance
        {
            internal static readonly SettingHelper Setting = new SettingHelper();
        }

        private 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(1024);

                GetPrivateProfileString(section, key, defaultValue, s, 1024, SettingFilePath);

                return s.ToString();
            }
            else
            {
                return String.Empty;
            }
        }

        #endregion

        public bool WriteIniData(string section, string key, string value)
        {
            if (File.Exists(SettingFilePath))
            {
                long OpStation = WritePrivateProfileString(section, key, value, SettingFilePath);

                if (OpStation == 0)
                {
                    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();

                st.WriteIniData("WPF", "WindowState", windowState);
            }
        }

        private string left;

        public double Left
        {
            get
            {
                if (string.IsNullOrWhiteSpace(left))
                {
                    SettingHelper st = SettingHelper.GetInstance();

                    left = st.ReadIniData("WPF", "Left");
                }

                if (string.IsNullOrWhiteSpace(left))
                {
                    left = "20";
                }

                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 = "20";
                }

                return Convert.ToDouble(top);
            }

            set
            {
                top = value.ToString();

                SettingHelper st = SettingHelper.GetInstance();

                st.WriteIniData("WPF", "Top", top);
            }
        }
    }
时间: 2024-08-25 13:55:40

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

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

手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIView的一个属性设置,这是因为如果我们用Interface Builder,勾选Ues Autolayout,这时autoresizingMask就会被Auto Layout 取代,在手写代码时,我们就需要手动控制,代码如下 [_shadow setTranslatesAutoresizingMask

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

UI到底应该用xib/storyboard完成,还是用手写代码来完成? 文章来源:http://blog.csdn.net/libaineu2004/article/details/45488665 参考文章: <关于代码手写UI,xib和StoryBoard> http://blog.csdn.net/likendsl/article/details/38731333 <代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧> ht

我要好offer之 str/mem系列手写代码

1. str*系列手写代码 a. 一定要注意末尾'\0'的处理,切记切记 b. 一定要对输入做有效性判断,多用断言就是了 int Strlen(const char* str) { assert(str != NULL); const char* tmp = str; while (*tmp != '\0') { ++tmp; } return tmp - str; } char* Strcpy(char* dst, const char* src) { assert(dst != NULL &

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

代码手写UI这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用. 大型多人合作项目使用代码构建UI,主要是看中纯代码在版本管理时的优势,检查追踪改动以及进行代码合并相对容易一些. 另外,代码UI可以说具有最好的代码重用性.如果你的目的是写一些可以高度重用的控件提供给其他开发者使用,那毫无疑问最好的选择应该是使用代码来完成UIView的子类.这样进一步的修改和其他开发者在使用时,都会方便不少.使用代码也是最为强大的,会有xib或者StoryBoard做不了的事情,但是使用代码最终一定能

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

在UI制作方面,逐渐分化三种主要流派:使用代码手写UI:使用单个xib文件组织viewController或者view:使用StoryBoard来通过单个或很少的几个文件构建UI.三种方式各有优劣,也各有自己最适用的场合. 一.手写代码UI 1.优势 √  适合大型项目大规模使用,利于版本管理.追踪改动以及代码合并 √  最好的代码重用性 2.遗憾 √  慢,开发周期长,维护代码复杂 √  自动布局AutoLayout困难 二.xib文件组织viewController或者view 1.优势 √

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

http://www.cnblogs.com/onepiece_wang/p/5558341.html#!comments 引用"基础知识的学习,一开始可能是背书,但是在后续若干年的工作过程中,在写代码时有没有想过为什么代码要写成这样子." 谁没有去想过呢?我深究过,但后来放弃了,原因很简单,因为我深究后发现,1+1等于2 苹果就是叫苹果.我去思考1+1为什么等于2 苹果为什么叫苹果.研究透后才发现只是多此一举,很浪费时间也没有实质性的作用.因为他就叫那个苹果名字,1+1就是等于2,我

iOS UICollectionView手写代码实现步骤

// //  ViewController.h //  collectionView手写代码 // //  Created by yangxiuying on 14/11/28. //  Copyright (c) 2014年 lanjiying. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UICollectionViewDataSource,U

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

一.包名获取的三种方式 1)找开发要2)mac使用命令:adb logcat | grep START win使用命令:adb logcat | findstr START 查看包名和入口如下: 3)通过aapt命令查看 cmd到你的android-sdk-windows\build-tools\28.0.3路径下,可以看到aapt 注意:mac使用ls,win使用dir命令 win使用命令  aapt dump badging C:\Users\Yangfan\Desktop\mobileqq

单例设计模式-(你确定自己写的懒汉单例真的是线程安全的吗)

1.单例设计模式的优缺点 优点: 1):只创建一个实例,就可以到处使用,加快创建实体的效率 缺点: 1):如果使用的频率比较低,实例会一直占据着内存空间,会造成资源浪费 2):可能会出现线程安全问题 2.单例设计模式的两种定法(饿汉.懒汉) 饿汉方法写法:(可能会造成资源浪费,类一被加载就创建了实例,但并不能确保这个实例什么时候会被用上) package com.zluo.pattern; /** * * 项目名称:single-instance <br> * 类名称:SingleInstan