首页 新闻 会员 周边

写个WINFORM程序, 要求如下:

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-21 16:43

写个WINFORM程序,界面上只需要一个按钮和一个文本显示区,每次点击按钮,生成一个流水号,流水号是根据config中ReChargeSeqNumber参数,当程序人为或非法关闭后,下次打开能接着上次的流水号继续生成。
ConfigurationManager.AppSettings["ReChargeSeqNumber"]从本config文件中读取参数
其中会涉及到将参数写入config,这个写入config的方法需要你自己完成
注意:ConfigurationManager.AppSettings读取配置会被缓存,用SetAppValue修改后,下次读取值不会变

Shang0109的主页 Shang0109 | 初学一级 | 园豆:50
提问于:2012-07-22 11:57
< >
分享
最佳答案
0

可以考虑写到文件里面不一定是config,个人认为config里面的文件还是固定不能被代码修改为好,那样的话只要序列化到文件就可以了,读的时候可以反序列化就可以。
using System.IO;
using
 System.Runtime.Serialization.Formatters.Binary;

public void SerializeNow()
    
{
        ClassToSerialize c 
= new ClassToSerialize();
        FileStream fileStream 
= new FileStream("c:\\temp.dat", FileMode.Create);
        BinaryFormatter b 
= new BinaryFormatter();
        b.Serialize(fileStream, c);
        fileStream.Close();
    }

    
public void DeSerializeNow()
    
{
        ClassToSerialize c 
= new ClassToSerialize();
        c.Sex 
= "kkkk";
        FileStream fileStream 
= new FileStream("c:\\temp.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
        BinaryFormatter b 
= new BinaryFormatter();
        c 
= b.Deserialize(fileStream) as ClassToSerialize;
          Response.Write(c.name);
        Response.Write(c.Sex);
        fileStream.Close();
    }

收获园豆:20
Tom.汤 | 老鸟四级 |园豆:3028 | 2012-07-22 22:58

不管怎样必须按照要求来做。不过还是要谢谢你。这个方法我会好好看看的。谢谢

Shang0109 | 园豆:50 (初学一级) | 2012-07-22 23:01

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text = SeriaNoManager.GetInstance().GenerateSerialNo();
}
}

public class SeriaNoManager
{
private static SeriaNoManager __seriaNoManager;
private static object objLock = new object();
private SeriaNoManager() { }
public static SeriaNoManager GetInstance()
{
lock (objLock)
{
return __seriaNoManager == null ? new SeriaNoManager() : __seriaNoManager;
}
}
public string GenerateSerialNo()
{
int serialNo = -1;
using (TransactionScope tranScope = new TransactionScope())
{
try
{
serialNo = int.Parse(ConfigurationManager.AppSettings
["ReChargeSeqNumber"]);
ConfigurationManager.AppSettings["ReChargeSeqNumber"] = (++serialNo).ToString();
}
catch
{
if (Transaction.Current != null)Transaction.Current.Rollback();
throw;
}
}
return serialNo.ToString();
}
}

Shang0109 | 园豆:50 (初学一级) | 2012-07-22 23:03

这个方法是一个网友提供的,不过在关闭后重新打开后无法 接着上次的流水号,继续运行,运行时 是重新计算流水号的。( 而我所需要的是可以接着关闭之前的流水号继续下去。)不知道这个该怎样修改?

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ReChargeSeqNumber" value="1"/>
</appSettings>
</configuration>  这个是配置文件中的代码。

Shang0109 | 园豆:50 (初学一级) | 2012-07-22 23:06

@Shang0109: 

所以我说不要把这个东西放在appSettings这里,序列化到一个XML里面,每次计算的时候都序列化保存.

Tom.汤 | 园豆:3028 (老鸟四级) | 2012-07-23 08:21
其他回答(1)
0

这是要你自己写还是别人帮着写?每点按钮把最后的流水号写入配置文件不行么?这也不费性能,不太知道你卡在哪了,个人感觉不什么问题。就是:运行程序===》读配置到一个数据结构(比如DataTable)====》当SetAppValue时把DataTable里的值写回硬盘的配置文件中。

幽灵~ | 园豆:268 (菜鸟二级) | 2012-07-22 17:58

怎么写?求解释。求代码 (在关闭重新打开之后,触发按钮会在textbox中显示上次最后运行时流水号之后的那个流水号)

支持(0) 反对(0) Shang0109 | 园豆:50 (初学一级) | 2012-07-22 18:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册