我是听一个 网友 说您的 C# winform 知识很好 所以我想求助你一个问题

来自:水果健康    更新日期:早些时候
您好!我想请教你一些关于C# winform的问题~

// 对编辑的单元格进行格式验证
//下面是datagridview的rowvalidating 事件 用这个事件就解决你的问题了

private void datagridview_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
if (!ValidatePeriod())
e.Cancel = true;
}

//下面是自己写的为空判断
private bool ValidatePeriod()
{
if (!bValidate) //在最上面定义一个 private bool bValidate =true;
return true;

string mess = "";
if (datagridview1.CurrentRow.Cells[1].Value == "") //这句表示这行的第二个字如果为空就给出下面的提示 你可以测试一下 随便删除哪一行的第二个数据 再点其他行 他就会提示 并留在这一行 直到修改正确才可以离开该行
{
mess += "请输入时段ID!
";
}

if (mess != "")
{
MessageBox.Show(mess, this.Text,MessageBoxButtons.OK,MessageBoxIcon.Information);
return false;
}

return true;
}

如果你不发布到服务器上,那就要在每台机器上安装MySQL的客户端

窗体响应一下拖拽事件就行了!

1、设置你的Form的AlowDrop属性设为true

2、选择窗体事件里面的DragEnter事件,双击,

3.在方法内粘贴如下代码

string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);

string path = file[0];

这样有了文件路径,可以使用.NET对FileInfo对象进行图标和程序的全部属性读取了!


如图,我随便拖一个文件到窗体:





我没有做过这种东西,不过我给你找了一个例子,说得比较详细。

这是一个类似于虚拟桌面的小程序,可以把windows的文件,文件夹等拖进窗体,窗体会生成相应的快捷方式,点击就可以系统默认方式打开。主要涉及的内容就是拖放操作的实现,还有其它的一些如获取系统图标,窗体自动隐藏(像QQ那样),读写配置文件app.config等,时间仓促(只做了一天),所以不太细致,还有一些特殊文件(我的电脑,回收站等)还不能添加,主要是为winform新手可以用来参考,下一版会加入特殊文件的添加,换肤,以及用户自定义配置等功能,敬请期待吧。
说明:这个程序只为新手参考使用,为方便查看,没有过多注重c#的面向对象概念 下面是主要部分的代码: 1.拖入操作实现,插入操作要注册两个事件 private void listView1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { arraymain = (System.Array)e.Data.GetData(DataFormats.FileDrop); begin(); } } private void listView1_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.All; } 在dragenter事件中程序要确定允许拖入的文件类型,这里允许所有拖入。dragdrop是拖放操作完成时执行的,在这里可以把接收到的内容(保存在system.array里)添加到程序里,使用arraymain.GetValue(i).ToString()可以循环得到所有拖入的内容。 这里使用的是listview控件,添加的代码就不贴了,相信大家都会,就是这一步 addIcon.SetIcon(imageList1, tooltip, true, temp); 这里是获取一个系统图标并加入到imagelist里,这一步需要调用系统API [DllImport("Shell32.dll")] public static extern int ExtractIcon(IntPtr h, string strx, int ii);//在外部实现的方法(extern) [DllImport("Shell32.dll")] public static extern int SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags); public struct SHFILEINFO { public IntPtr hIcon; //文件句柄 public int iIcon; public uint dwAttributes; public char szDisplayName; public char szTypeName; } 这段代码是对API的声明,下面是seticon方法 /// <summary> /// 获取系统图标 /// </summary> /// <param name="FileName">来源文件路径</param> /// <param name="tf">true取大图false取小图</param> /// <param name="keyname">imagelist的key</param> public static void SetIcon(System.Windows.Forms.ImageList imageList1, string FileName, bool tf, string keyname) { SHFILEINFO fi = new SHFILEINFO(); uint i = tf == true ? (uint)16640 : (uint)257; int iTotal = (int)SHGetFileInfo(FileName, 0, ref fi, 100, i); //SHGFI_ICON|SHGFI_SMALLICON ref(表示引用 ,fi就是调用函数里的参数) try { if (iTotal > 0) { Icon ic = Icon.FromHandle(fi.hIcon);//从图标指定的windows句柄创建图标 imageList1.Images.Add(keyname, ic); } } catch { } } seticon方法根据一个路径,可以是文件的,也可以是文件夹的,找到系统的图标,并加入imagelist中完成以上步骤,拖入的操作就完成了,下面是拖出的操作。拖出操作需要注册两个事件防采集 private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { //如果是左键拖动,记录选中的项 if (e.Button == MouseButtons.Left) { if (listView1.SelectedItems.Count <= 0) { return; } int i = 0; items = new String[listView1.SelectedItems.Count]; foreach (ListViewItem item in listView1.SelectedItems) { items[i] = item.Text; i++; } DataObject data = new DataObject(DataFormats.FileDrop, items); data.SetData(DataFormats.StringFormat, items[0]); //通知系统开始拖动,但不对拖出项做操作 DoDragDrop(data, DragDropEffects.None); } } /// <summary> /// 如果拖出了本窗体,从listitem中移除项 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listView1_DragLeave(object sender, EventArgs e) { for (int i = 0; i < items.Length; i++) { imageList1.Images.RemoveByKey(items[i]); listView1.Items.RemoveByKey(items[i]); } } 在itemdrag中获取选中并在拖动的项,加入一个数组中,并通知系统开始拖动 DoDragDrop(data, DragDropEffects.None); 这一步很重要,不然系统不会允许你拖动,第二个参数是通知系统不需对拖出的内容操作,由本程序来完成。这里也可以通知系统做一些操作,来实现其它的一些功能。 在内容被拖出窗体,触发dragleave后,把上一步保存的选中项从listview中移除。 下一步要说明的就是app.config的读写操作,本程序退出时会记录窗体的当前状态包括是否显示,窗体位置及是否自动隐藏。 ConfigurationManager.AppSettings里提供了一个set方法,不过我怎么试也没有效果的,只能还是用标准的方法。config文件在默认情况下是只读的,如果要进行写操作,首先要打开它 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 然后用key把一个已存在的项删除 config.AppSettings.Settings.Remove(AppKey); 修改的话再添加上一个相同的key config.AppSettings.Settings.Add(AppKey, AppValue); 这样就完成了对一个项的修改过程,不过下面的两句才是最重要的,保存: config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); 到此就完成了。不过有一点要注意的是,在IDE的状态下调试时并不会真正的保存,只有单独启动程序才能实现保存效果,这是笔者经过反复测试得出的结论,个中原因只有问bill了。 程序添加了任务栏图标,需要在菜单-帮助下点出退出才会真正退出,窗体的关闭按钮只会使程序最小化到任务,在任务栏图标点右键也会出现同一菜单。在窗体隐藏到任务栏时,可双击任务栏图标使窗体出现。如果把窗体拖动到屏幕的边侧,窗体会自动隐藏并记录状态,这时双击任务栏图标窗体会回到隐藏前的状态,也就是自动隐藏状态。

自定义

你可以加C#方面的QQ群去问问试试,里面高手很多


我是听一个 网友 说您的 C# winform 知识很好 所以我想求助你一个问题视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网