我的语音识别项目包括2个表格form1&窗体2。 Form2是我的主要形式,但在加载form2之前,我的程序从用户通过form1获取变量值并将其传递给form2。这意味着一开始我的程序打开form1取值&将它传递给form2,然后显示form2。 现在我的问题是如何 make form1仅在程序第一次启动安装后加载,第一次启动后直接加载form2吗? 意味着不应该在那之后加载form1 ..
答案 0 :(得分:2)
我建议使用一个简单的文本文件,您可以在其中存储应用程序第一次启动时记录的输入值,然后检查具有该值的文件是否存在并将其读回。
例如
string customValue = string.Empty;
string appData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
appData = Path.Combine(appData, "MyAppName");
if(!Directory.Exists(appData))
Directory.CreateDirectory(appData);
string appDataFile = Path.Combine(appData, "MyAppNameSettings.txt");
if(File.Exists(appDataFile))
customValue = File.ReadAllText(appDataFile);
else
{
customValue = AskUserForTheFirstTimeValue();
File.WriteAllText(appDataFile, customValue);
}
该文件存储在为存储数据文件而创建的公共应用程序数据(C:\ programdata)的子文件夹中。您首次启动时检查文件是否存在。如果文件存在,则读取其内容(此处假定为简单字符串),如果文件不存在,则询问输入并存储应用程序连续运行的值。
答案 1 :(得分:0)
您可以在Windows注册表中创建一个注册表项(regedit),并在您启动程序时验证它是否存在以及值。
关于注册表项的链接:
http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey(v=vs.110).aspx
答案 2 :(得分:0)
你应该有一个设置文件来保存像IsFirstRun = true;
这样的变量这个应用程序应该用这个文件进行分发和编译,在启动时你应该读取这个文件,如果你遇到真正的状态,你应该加载适当的形式。您还应确保第二次启动条件的值立即设置为false。
查看.net的设置类。
答案 3 :(得分:0)
我可以建议两种方式:
在c#中创建此类文件非常简单,如果您从标准Windows Forms Project Template
开始,您很可能已经在该项目中拥有app.config
,如果没有,请按照{{3 }(在Application Configuration Files
下)。
在文件中添加一个简单的布尔值(在appSettings-node
下创建configuration-node
}:
<appSettings>
<add key="FirstRun" value="true" />
</appSettings>
在您执行应用程序配置的第一个表单中,添加代码以使用here - 类编程方式操作app.config
以完成配置已完成并可保存的事件(可能是某些按钮单击,请注意您需要参考System.Configuration
):
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
bool myVal = bool.Parse(config.AppSettings.Settings["FirstRun"].Value);
if (myVal)
{
// MessageBox.Show("yep, its true");
config.AppSettings.Settings["FirstRun"].Value = false.ToString();
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
else
{
// MessageBox.Show("na, its not true anymore.");
}
由于您的描述似乎只使用第一个表单输入一些应用程序配置值,我建议您使用ConfigurationManager。
该控件可以很容易地绑定到一个对象,该对象暴露一些属性(令人惊讶)然后用于呈现包含标题和值选择控件的标准化控件依赖于属性的类型,例如:
public class Settings
{
public int MyProperty1 { get; set; }
public string MyProperty2 { get; set; }
}
然后检查程序启动时是否存在配置文件(您定义路径),如果存在,请尝试从其xml反序列化对象(下面的示例适用于基本类型,对于更复杂的类型,您可能有扩展序列化器,但你明白了。
该序列化对象代表您保存的应用程序设置,因此您不再需要打开propertygrid-form。
如果找不到文件,则使用一个简单的新构造对象初始化网格,并显示该表单:
这将进入您的初始化代码:
FileInfo file = new FileInfo("SaveHere.xml");
if (file.Exists)
{
using(StreamReader reader = new StreamReader("SaveHere.xml"))
{
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
Settings mySettings = (Settings)serializer.Deserialize(reader);
reader.Close();
}
}
else
{
this.propertyGrid1.SelectedObject = new Settings();
// show form code
}
此代码会进入您要保存配置的事件代码
using(StreamWriter writer = new StreamWriter("SaveHere.xml",false))
{
XmlSerializer serializer = new XmlSerializer(this.propertyGrid1.SelectedObject.GetType());
serializer.Serialize(writer, this.propertyGrid1.SelectedObject);
writer.Close();
}