主页 > 服务器 > winform如何做一个窗体路径?

一、winform如何做一个窗体路径?

首先要将父窗体的IsMdiParent属性设置为true,第二,就是将menu控件加入要添加控件的窗体,然后就是挨个的添加按钮控件,就是改变那个按钮文本了,例如“设置比赛信息”,“选手管理”等按钮文本,之后,在这些按钮的Click单击事件中添加代码: 要打开的窗体 实例= new 要打开的窗体(); 实例。

父窗体=this; 实例。open(); 如果还要实现单个已经打开的窗体的唯一打开性,那么需要遍历系统中现已经打开的所有OpenForm

二、winform如何不重复创建文件?

要避免在winform中重复创建文件,可以按照以下步骤进行操作:

1. 在创建文件之前,首先需要检查文件是否已经存在。可以使用system.io.file类的exists方法来检查文件是否已经存在于指定的路径中。

2. 如果文件已经存在,则可以选择跳过创建文件的步骤,或者进行其他逻辑处理,比如覆盖已存在的文件或者提示用户文件已经存在。

3. 如果文件不存在,则可以继续执行创建文件的逻辑。在创建文件时,可以使用system.io.file类的create方法来创建新文件。

通过以上步骤,可以确保在winform中不会重复创建文件,而是根据文件是否已经存在进行相应的处理。

三、怎样将窗体程序打包成一个安装程序?

1 新建安装部署项目打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定。

2 安装向导关闭后打开安装向导,点击下一步,或者直接点击完成。

3 开始制作安装向导完成后即可进入项目文件夹:PS:在这里,有很多朋友问我,什么是应用程序的可执行文件和相应的类库和组件,在这里我解释一下,应用程序的可执行文件即是你建立的winform应用程序项目最终生成的EXE可执行文件,而相应的类库则是执行这个EXE文件所有需要的非操作系统dll文件,在这里只要将EXE文件选中添加,VS会自动将其用到的DLL文件添加.(这里你可以将应用程序项目中生成方式选择Release,然后生成,将bin/Release文件夹下的文件按结构添加进来即可)双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进来。然后右击你的文件,创建快捷方式,然后把快捷方式分别复制或剪切到左边的"用户的'程序'菜单"和"用户桌面"中。这样安装程序安装完成后会在 "开始->所有程序"和"桌面"上生成程序的快捷方式。也可以直接在"用户的'程序'菜单"和"用户桌面"相应目录下新建快捷方式,然后定位到你的文件。然后右击左边的"应用程序文件夹"打开属性对话框:将属性中的"DefaultLocation"的路径中的"[Manufacturer]"去掉,不然的话做好的安装程序默认安装目录会是"C:/Program Files/你的用户名/安装解决方案名称";然后打开解决方案管理器,右击你的解决方案名称,选择属性:打开的属性页中,选择"系统必备", 在打开的系统必备页中,在"指定系统必备安装组件的位置"中选中如下选择项:从与我的应用程序相同的位置下载系统必备组件。选上以后,在生成的安装文件包中包含.NetFramework组件 。好了,这样就完成99%了,然后点击"生成->生成解决方案",哈,生成成功!

4 制作完成现在打开解决方案文件夹下的Debug文件夹,就可以看到生成的安装文件了。

5 关于"卸载"功能的添加上面只介绍了简单的生成安装的方法,但是在VS2005下并没有直接生成卸载程序的功能,所以我们只好用msi来实现了,操作方法如下:在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,这个文件在c:/windows/system32文件夹下,添加进去以后,为了让他更像个卸载程序,把他的名字改成"Uninstall.exe",当然这个关系不大,改不改都行。然后创建一个快捷方式,放到"开始-程序"中,接下来我们要做的就是查找这个部署项目的ProductCode了,鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性,这个区别很大,这时你就可以看到ProductCode了。然后打开你创建的那个快捷方式的属性对话框,在Aguements属性中输入"/x {ProductCode}",好了,然后点击"生成解决方案"即可生成带有卸载功能的安装程序了。

四、C#写一个简单的Log日志?

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

namespace itsvse.demo

{

/// <summary>

/// 日志类

/// </summary>

/// <remarks>

/// 当调用Write方法时不会造成线程阻塞,而是立即完成方法调用,因此调用线程不用等待日志写入文件之后才返回。

/// </remarks>

public class Logger

{

public static void Write(string msgText)

{

Write(DateTime.Now, MsgType.Information, "", msgText);

}

/// <summary>

/// 写日志基础方法

/// </summary>

/// <param name="msgDataTime"></param>

/// <param name="msgType"></param>

/// <param name="msglocatio{过滤}n"></param>

/// <param name="msgText"></param>

private static void Write(DateTime msgDataTime, MsgType msgType, string msglocatio{过滤}n, string msgText)

{

QueueManager qm = new QueueManager();

qm.WriteToQueue(msgDataTime, msgType, msglocatio{过滤}n, msgText);

}

#region QueueManager

/// <summary>

/// 企业应用框架的日志类

/// </summary>

private class QueueManager : IDisposable

{

/// <summary>

/// 日志对象的缓存队列

/// </summary>

private static Queue<Msg> _msgsQueue;

/// <summary>

/// 日志文件保存的路径

/// </summary>

private static readonly string Path = BasePath + "\\AppLogs\";

/// <summary>

/// Web和WinForm通用的取当前根目录的方法

/// </summary>

private static string BasePath

{

get

{

if (System.Web.HttpContext.Current != null)

return System.Web.HttpContext.Current.Server.MapPath("~/").TrimEnd(new char[] { '\\' });

else //当控件在定时器的触发程序中使用时就为空

{

return AppDomain.CurrentDomain.BaseDirectory.TrimEnd(new char[] { '\\' });

}

//return AppDomain.CurrentDomain.BaseDirectory.TrimEnd(new char[] { '\\' });

}

}

/// <summary>

/// 日志写入文件线程的控制标记,true为正在写入

/// </summary>

private static bool _state = false;

/// <summary>

/// 日志文件生命周期的时间标记

/// </summary>

private static DateTime _timeSign;

/// <summary>

/// 日志文件写入流对象

/// </summary>

private static StreamWriter _writer;

private delegate void WorkDelegate();

private static WorkDelegate _workDg;

/// <summary>

/// 初始化

/// </summary>

public QueueManager()

{

if (_msgsQueue == null)

{

if (!Directory.Exists(Path))

Directory.CreateDirectory(Path);

_msgsQueue = new Queue<Msg>();

_workDg = new WorkDelegate(Work);

}

}

/// <summary>

/// 写入新日志,根据指定的日志对象Msg

/// </summary>

/// <param name="msg">日志内容对象</param>

private void WriteToQueue(Msg msg)

{

if (msg != null)

{

lock (_msgsQueue)

{

_msgsQueue.Enqueue(msg);

}

}

if (_msgsQueue.Count > 0 && !_state)

{

_state = true;

_workDg.BeginInvoke(null, null);

}

}

/// <summary>

/// 日志写入文件线程执行的方法,消费者

/// </summary>

private void Work()

{

//判断队列中是否存在待写入的日志

while (_msgsQueue.Count > 0)

{

Msg msg = null;

lock (_msgsQueue)

{

msg = _msgsQueue.Dequeue();

}

if (msg != null)

{

WriteToFile(msg);

}

}

_state = false;

FileClose();

}

/// <summary>

/// 通过判断文件的到期时间标记将决定是否创建新文件。

/// </summary>

/// <returns></returns>

private static string GetFilename()

{

DateTime now = DateTime.Now;

string format = "yyyy-MM-dd'.log'";

_timeSign = new DateTime(now.Year, now.Month, now.Day);

_timeSign = _timeSign.AddDays(1);

return now.ToString(format);

}

/// <summary>

/// 写入日志文本到文件的方法

/// </summary>

/// <param name="msg"></param>

private void WriteToFile(Msg msg)

{

try

{

if (_writer == null)

{

FileOpen();

}

//判断文件到期标志,如果当前文件到期则关闭当前文件创建新的日志文件

if (DateTime.Now >= _timeSign)

{

FileClose();

FileOpen();

}

if (_writer != null)

{

_writer.WriteLine(string.Format("{0}", msg.Datetime) + "\t" + msg.Type + "\t" + msg.locatio{过滤}n + "\t" + msg.Text);

_writer.Flush();

}

}

catch (Exception e)

{

Console.Out.Write(e);

}

}

//打开文件准备写入

private void FileOpen()

{

_writer = new StreamWriter(Path + GetFilename(), true, Encoding.UTF8);

}

//关闭打开的日志文件

private void FileClose()

{

if (_writer != null)

{

_writer.Flush();

_writer.Close();

_writer.Dispose();

_writer = null;

}

}

/// <summary>

/// 写入新日志,根据指定的日志时间、日志内容和信息类型写入新日志

/// </summary>

/// <param name="msgDataTime"></param>

/// <param name="msgType"></param>

/// <param name="msglocatio{过滤}n"></param>

/// <param name="msgText"></param>

public void WriteToQueue(DateTime msgDataTime, MsgType msgType, string msglocatio{过滤}n, string msgText)

{

WriteToQueue(new Msg(msgDataTime, msgType, msglocatio{过滤}n, msgText));

}

#region IDisposable 成员

/// <summary>

/// 销毁日志对象

/// </summary>

public void Dispose()

{

_state = false;

}

#endregion

#endregion

#region Msg

/// <summary>

/// 表示一个日志记录的对象

/// </summary>

private class Msg

{

//日志记录的时间

//日志记录的类型

//日志记录的内容

/// <summary>

/// 创建新的日志记录实例;

/// </summary>

/// <param name="msgDataTime"></param>

/// <param name="msgType"></param>

/// <param name="msglocatio{过滤}n"></param>

/// <param name="msgText"></param>

public Msg(DateTime msgDataTime, MsgType msgType, string msglocatio{过滤}n, string msgText)

{

Datetime = msgDataTime;

Type = msgType;

locatio{过滤}n = msglocatio{过滤}n;

Text = msgText;

}

/// <summary>

/// 获取或设置日志记录的时间

/// </summary>

public DateTime Datetime { get; private set; }

public string locatio{过滤}n { get; private set; }

/// <summary>

/// 获取或设置日志记录的消息类型

/// </summary>

public MsgType Type { get; private set; }

/// <summary>

/// 获取或设置日志记录的文本内容

/// </summary>

public string Text { get; private set; }

}

}

#endregion

#region MsgType

/// <summary>

/// 日志消息类型的枚举

/// </summary>

public enum MsgType

{

/// <summary>

/// 普通信息类型的日志记录

/// </summary>

Information,

/// <summary>

/// 警告信息类型的日志记录

/// </summary>

Warning,

/// <summary>

/// 错误信息类型的日志记录

/// </summary>

Error,

/// <summary>

/// 成功信息类型的日志记录

/// </summary>

Success,

/// <summary>

/// 致命类型的日志记录

/// </summary>

Fatal

}

#endregion

}

}

五、什么原因导致winform程序崩溃?

这个是程序有bug,有可能是dll没复制或没安装,或相对路径写成绝对路径。去windows日志看具体错误。

六、winform如何做一个窗体路径菜单?

首先要将父窗体的IsMdiParent属性设置为true,第二,就是将menu控件加入要添加控件的窗体,然后就是挨个的添加按钮控件,就是改变那个按钮文本了,例如“设置比赛信息”,“选手管理”等按钮文本,之后,在这些按钮的Click单击事件中添加代码: 要打开的窗体 实例= new 要打开的窗体(); 实例。

父窗体=this; 实例。open(); 如果还要实现单个已经打开的窗体的唯一打开性,那么需要遍历系统中现已经打开的所有OpenForm 希望可以帮助你~!

相关推荐

热门图文