一些背景知识:
我目前正在开发一个应用程序,允许新手计算机用户测试他们的ping而无需进入命令提示符。
我的应用程序有效,但我非常希望将应用程序提升到下一级别,并从本地存储的.INI文件中提供默认表单值。
我可以给人们现有的代码,但我强调这个应用程序有效 - 我只是对推进代码感兴趣所以我可以读取默认的表单值。
using System;
using System.Collections.Generic;
using System.Net;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.NetworkInformation;
namespace Ping_Application
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void pingButton_Click(object sender, EventArgs e)
{
if (pingAddressTextBox.Text != "")
{
DataTable resultsList = new DataTable();
resultsList.Columns.Add("Time", typeof(int));
resultsList.Columns.Add("Status", typeof(string));
for (int indexVariable = 1; indexVariable <= timesToPing.Value; indexVariable++)
{
string stat = "";
Ping pinger = new Ping();
PingReply reply = pinger.Send(pingAddressTextBox.Text);
if (reply.Status.ToString() != "Success")
stat = "Failed";
else
stat = reply.RoundtripTime.ToString();
pinger.Dispose();
resultsList.Rows.Add(Convert.ToInt32(reply.RoundtripTime), reply.Status.ToString());
}
resultsGrid.DataSource = resultsList;
minPing.Text = resultsList.Compute("MIN(time)", "").ToString();
maxPing.Text = resultsList.Compute("MAX(time)", "").ToString();
avgPing.Text = resultsList.Compute("AVG(time)", "").ToString();
}
else
{
MessageBox.Show("You are required to enter an address.");
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
我不确定该如何去做?我的应用程序将在哪里存储default.ini文件?
此外,欢迎对现有代码发表任何评论。
如果有人可以提供帮助,我将不胜感激。
非常感谢, Ĵ
答案 0 :(得分:5)
您可以将默认值存储在ini文件中(即配置文件),此默认文件将存储在您的系统D或C文件夹中...
并从该文件中,您可以通过以下方法从ini文件中获取这些默认值
/// <summary>
/// This will read config.ini file and return the specific value
/// </summary>
/// <param name="MainSection">Main catergory name</param>
/// <param name="key">name of the key in main catergory</param>
/// <param name="defaultValue">if key is not in the section, then default value</param>
/// <returns></returns>
public static string getIniValue(string MainSection, string key, string defaultValue)
{
IniFile inif = new IniFile(AppDataPath() + @"\config.ini");
string value = "";
value = (inif.IniReadValue(MainSection, key, defaultValue));
return value;
}
public static string AppDataPath()
{
gCommonAppDataPath = @"c:\" + gCompanyName + @"\" + gProductName; // your config file location path
return gCommonAppDataPath;
}
创建一个类似于这个INifile.cs的类,并将下面的代码放在ini.cs
中 public class IniFile
{
public string path;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
/// <summary>
/// INIFile Constructor.
/// </summary>
/// <param name="INIPath"></param>
public IniFile(string INIPath)
{
path = INIPath;
}
/// <summary>
/// Write Data to the INI File
/// </summary>
/// <param name="Section"></param>
/// Section name
/// <param name="Key"></param>
/// Key Name
/// <param name="Value"></param>
/// Value Name
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.path);
}
/// <summary>
/// Read Data Value From the Ini File
/// </summary>
/// <param name="Section"></param>
/// <param name="Key"></param>
/// <param name="Path"></param>
/// <returns></returns>
public string IniReadValue(string Section,string Key,string Default)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section,Key,Default,temp,255,this.path);
return temp.ToString();
}
public void IniWriteString(string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, this.path);
}
public string IniReadString(string Section, string Key, string Default)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, Default, temp, 255, this.path);
return temp.ToString();
}
}
并且配置文件中的值看起来像这样......
[System]
GroupCode=xx
SiteCode=1234
MemberPrefix=xxx
AutoStart=no
EnablePosButton=yes....
您可以使用
获取此值string a = getIniValue("System", "Sitecode", "");
你会得到像这样的价值1234
请告诉我是否不清楚
我希望它会帮助你......
答案 1 :(得分:2)
如果您使用的是Visual Studio 2005/2008或2010,则使用INI可能不是一个好的选择。相反,您可以使用Visual Studio提供的现成工具,方法是单击:
项目&GT;属性&gt;设置标签
您可以在其中添加用户设置并将其绑定到GUI表单。 Visual Studio会为您处理大部分内容,当您想引用该变量时,请使用以下语法:
string LocalString=Properties.Settings.Default.YourSettings;
此外,一次通话有助于将所有员工保存到档案中。
Properties.Settings.Default.Save();
有关更多详细信息,请参阅Windows Form 2.0 Data Binding一书。