1. 出现”文件正在被另一进程使用,无法访问”
我写程序的时候出现这个错误:
无法将文件“obj\x86\Debug\shiwai.exe”复制到“bin\Debug\shiwai.exe”。文件“bin\Debug\shiwai.exe”正由另一进程使用,因此该进程无法访问此文件。
引发问题的原因:
我的程序设计的是在子窗口打开后将主窗体进行了隐藏(因为我返回的时候是用的show函数,这样才不会出现多个窗体)。我直接关闭子窗体的时候,所有的窗体就都消失了,但是实际上程序进程并没有结束,当再次执行程序时,就出现了上面的问题。
问题解决:
我的想法是在每个子窗口关闭的时候,让它们都重新返回主窗口,然后让主窗口关闭时关闭整个程序的进程。这样的话,不仅实现了调用子窗口时主窗口隐藏功能,又能避免关闭窗口而进程未关闭的问题。
① 子窗口关闭时返回主窗口
Form2.cs:
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
var frm = new Form1();
frm.Show();
}
Form2.Designer.cs:
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing);
注意:这是当需要触发FromClose事件的时候都需要添加的。
② 主窗口关闭时结束程序进程
From1.cs:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
2. 没有输入全部参数时会报错
问题描述:
在进行模型中的传输损耗时我们需要进行参数输入,程序对它进行读入后才能进行计算,如果读入为空则会出错。
解决思路:
在 “计算传输损耗” 的Click事件中对参数输入框textBox控件内容进行判断,如果为空,则用默认值进行填入然后进行计算。
(感觉这种解决办法不是很好,后面可能会改成对数值进行判断和提示,添加默认值的功能可以再添加另一个按钮用来实现。)
其中一部分的代码:
private void Btn_OK_Click(object sender, EventArgs e)
{
int f_c ;
if (Txt_Fc.Text == "") //如果Txt_Fc.Text为空
{
Txt_Fc.Text = "900"; //直接将900写入Txt_Fc.Text中
}
f_c = Convert.ToInt32(Txt_Fc.Text); //读取Txt_Fc.Text中的内容并转换为int类型赋值给f_c
}
当不进行参数输入的时候,点击“计算传输损耗”的运行结果:

补充几种判断textBox中内容为空的方式:
我上面用的是
if (textBox.Text == "")
这应该是最简单粗暴的一种,另外还有下面两种:
if(string.IsNullOrEmpty(textBox.Text))
if(string.IsNullOrWhiteSpace(tbx.Text))
3. 一种简单的主窗体美化
为了将界面设计的比较好看,我们对于窗体以及控件都需要进行一些设计,这里我们就介绍一种比较方便的美化方法——使用皮肤库 IrisSkin4.dll。它可以让整个窗体的风格进行统一,还有各种样式可以自己选择。
具体的过程可以看这篇博客(直接引用过来了,这个博主介绍的很详细)
https://blog.youkuaiyun.com/kevinmeanscool/article/details/74010908
我的窗体美化结果如下:

本文解决了编程中常见的两个问题:一是文件被另一进程使用导致无法访问的错误,通过调整窗口关闭逻辑来解决;二是参数输入框为空时程序报错,采用默认值填充并计划增加数值判断和提示。
145

被折叠的 条评论
为什么被折叠?



