十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
分类: 电脑/网络 程序设计 其他编程语言
长治ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
问题描述:
我用的是Timer计时器:
如何将程序控制住,让它第一次发现没保存后,只击活一次提示保存,然后使用修改后的保存路径:(代码如下)
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'如何将程序控制住,让它第一次发现没保存后,只击活一次提示保存,然后使用修改后的保存路径
If SaveFileDialog1.FileName = "" Then
If SaveFileDialog1.ShowDialog Then
rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)
End If
Else
'如果已经选择了要保存的文件名,则保存文本到文件中
rtbox.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)
End If
End Sub
————————————————————
此代码执行后变成死循环。
解析:
经过我的潜心修炼问题终于是解决了.请看代码
Imports System.IO
Private strFileName As String = "myRTFdoc.txt"
Private flgFirst As Boolean = True
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
'如何将程序控制住,让它第一次发现没保存后,只击活一次提示保存,然后使用修改后的保存路径
Call zc()
End Sub
Private Sub zc()
'Timer2.Stop()
With SaveFileDialog1
.DefaultExt = "txt"
.FileName = strFileName
.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*"
.FilterIndex = 1
.InitialDirectory = "c:\"
.OverwritePrompt = True
.Title = "Save Reminding"
End With
'Timer2.Enabled = False
If flgFirst = True Then
If SaveFileDialog1.ShowDialog = DialogResult.OK Then
strFileName = SaveFileDialog1.FileName
Dim objWriter As StreamWriter = New StreamWriter(strFileName, False)
objWriter.Write(rtbox.Text)
objWriter.Close()
objWriter = Nothing
End If
flgFirst = False
'Timer2.Enabled = True
' Timer2.Start()
Else
'flg= second
Dim objWriter As StreamWriter = New StreamWriter(strFileName, False)
objWriter.Write(rtbox.Text)
objWriter.Close()
objWriter = Nothing
End If
'Timer2.Enabled = True
'Timer2.Start()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer2.Enabled = True
' zc()
End Sub
知道问题在哪里嘛?我调试了确实是"死循环"、其实不是真正的死循环、是time tick事件你设定的时间太短了.估计只设置了1-5s左右.那么程序运行还需要时间.所以他就不停地调用timetick时间.你的savedialog对话框根本来不急弹出来.
所以建议你把timer的interval的值设置高点最好12-15秒 触发一次.
当然我想还有其他的方法、还没有彻底取研究下.
比如stop 什么 、那还需要时间.
至少目前我的方法是可以了.
我设置的12s P4. 3.0 1G 内存 跑下我的程序如果 F10(F8)慢点的话就来不及了.
另为把你的程序小改了下、应该可以满足你的要求了.
代码如下:
/// summary
/// 连接到窗体:通过密码保护信息找回密码!
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void lbl_mibao_Click(object sender, EventArgs e)
{
Getbackpwd getbackpwd = new Getbackpwd();
getbackpwd.Show();
}
/// summary
/// 当该窗体加载时从xml文件中读取用户信息并加载到combox的Items中
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void Addresslist_Load(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader(@"E:\面向对象--C#练习\通讯录\address list\address list\user.xml");
while (reader.Read())
{
//if (reader.LocalName.Equals("Name") || reader.LocalName.Equals("Number"))
if (reader.LocalName.Equals("username"))
{
this.cmbUserName.Items.Add(reader.ReadString());
}
//if (reader.LocalName.Equals("Number"))
//{
// this.label2.Text += reader.ReadString() + "\n";\
//}
}
reader.Close();
}
/// summary
/// 保存用户名到user.xml
/// /summary
//在listcontol上更改SelectedValue时执行从数据库读取密码的事件
private void cmbUserName_SelectedValueChanged(object sender, EventArgs e)
{
string username = cmbUserName.Text.Trim();
string sql = string.Format("select pwd from Admin where Username='{0}'", username);
try
{
SqlCommand command = new SqlCommand(sql, DBHelper.connection);
DBHelper.connection.Open();
SqlDataReader dataReader = command.ExecuteReader();
while (dataReader.Read())
{
txtpwd.Text = (string)dataReader["pwd"];
checkBoxpwd.Checked = true;
}
}
catch
{
MessageBox.Show("数据库操作出错!");
}
finally
{
DBHelper.connection.Close();
}
}
/// summary
/// 记住密码操作
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void checkBoxpwd_Enter(object sender, EventArgs e)
{
bool check = true;
check = checkinput(cmbUserName.Text.Trim());
if ((string)cmbUserName.Text.Trim() == "")
{
MessageBox.Show("请输入用户名", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
cmbUserName.Focus();
}
else
{
if (txtpwd.Text.Trim() == "")
{
MessageBox.Show("请输入密码", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtpwd.Focus();
}
else
{
bool isValidUser = false; // 标识是否为合法用户
string message = ""; // 如果登录失败,显示的消息提示
// 如果验证通过,就显示相应的用户窗体,并将当前窗体设为不可见
if (ValidateInput())
{
// 调用用户验证方法
isValidUser = ValidateUser(cmbUserName.Text, txtpwd.Text, ref message);
// 如果是合法用户,显示相应的窗体
if (isValidUser)
{
if (check == true)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"E:\面向对象--C#练习\通讯录\address list\address list\user.xml");//(@"E:\面向对象--C#练习\通讯录\address list\address list\user.xml");
XmlElement node = doc.CreateElement("user");
XmlNode xnode = (XmlNode)doc.CreateElement("username");
xnode.InnerText = cmbUserName.Text.Trim();
node.AppendChild(xnode);
doc.DocumentElement.InsertAfter(node, doc.DocumentElement.LastChild);
doc.Save(@"E:\面向对象--C#练习\通讯录\address list\address list\user.xml");
//doc.Load (@"E:\面向对象--C#练习\通讯录\address list\address list\user.xml");
}
}
// 如果登录失败,显示相应的消息
else
{
MessageBox.Show(message, "记住密码失败!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
}
/// summary
/// 验证当前combox中内容是否已经存在于xml文件中
/// /summary
/// param name="text"/param
/// returns/returns
private bool checkinput(string text)
{
int count;
bool c = true;
for (count = 0; count cmbUserName.Items.Count;count ++ )
{
if (text ==(string )cmbUserName .Items [count])
{
c=false;
}
}
return c;
}
xml文件内容如下:?xml version="1.0" encoding="utf-8"?
person
user
所谓绿色软件是不需要安装就可以运行,纯粹单个文件的软件很少。存在注册表中了,简单点的如:
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
SaveSetting(ProductName, Me.Name, "CheckBox1", CheckBox1.Checked)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
CheckBox1.Checked = GetSetting(ProductName, Me.Name, "CheckBox1", CheckBox1.Checked)
End Sub
VB可以用任何格式保存文件数据不仅仅是注册表\XML\INI
甚至于未知的格式。我教你命令:
open "C:\setup.safe" for output as #1
print #1,"object"
close #1
其中setup.safe就是一个文件,后缀为.safe,当然可以改成.dat包括其他任何后缀.
object就是你要写入setup.safe的内容.