WinForm操作隐藏的小知识点

简介: WinForm操作隐藏的小知识点

这次的项目需要使用Winform来实现,我们使用的是CSkin的皮肤。文章主要记录使用过程中遇到的小问题,也是楼主网上查找很久才找到的,这里总结下。

插件地址:


使用SKinDataGridView出现列乱排序问题



下面这张图是我在使用SKinDataGridView的界面,可以发现这个操作列没有在最后面,可是我在集合中分明是按照顺序来添加的,排序方式都一样的。


679140-20161207144009866-2128603552.png


查找资料发现这个数据控件有点问题,最好不要让其自动的排序,除非是自己的查找列和展示的列名一致,这样才会正常显示,要是不一样就会像上面图片一样显示。(我这个就是因为ID和状态栏隐藏了,所以顺序就打乱了。)


下面这张图是我集合中的添加顺序


679140-20161207144011007-741922796.png


其实之前我一直在调整SortMode,这个上面显示是排序的顺序,但是一直出错

经过多方查找终于找到了原因,其实就是之前上面说的哪样,栏目中又些隐藏了。那么我们就关闭其排序,不让其自动进行排序。代码如下:

//关掉列排序
  skinGuidData.AutoGenerateColumns = false;
skinGuidData.DataSource = plService.GetPackagelistsByState();

F12到后台发现:其实是不让其自动排序。


679140-20161207144012351-1226607354.png


这样就完美的解决了上面的问题。


时间控件SKinDataTimePicker显示右边时间图标


这个问题其实完全可以避免,但是我们在画页面的时候把里面的文本框的内容设置的太大了,导致此控件本身的时间图标不能正常显示。效果如下图所示:


679140-20161207144013241-1035415823.png


下面这个是运行界面的效果,很是难受呀。导致我检查了很久才发现问题的所在。


679140-20161207144013991-670107969.png


原因:是因为我们把字体的font设置的太大了,导致把图标遮住了。所以才会出现上图的界面;


679140-20161207144014679-179215167.png

我们把这个设置未9pt就OK了。<还是要细心呀>


窗体的几个常见操作


    做技术一定要认真,一点小的失误都不允许。


窗体固定显示到正中央


   StartPosition:CenterScreen



不让其窗体放大放小


   FormBorderStyle :F开头的都可以



取消最大化,最小化


    MaximumBox:False


    MinimizeBox:false


关于方法中可空类型的处理


是这样的,service方法中又很多参数是可空类型的,但是我们从前台接收到的是各种不能为空的类型。


之前的做法:没一次进行判断,不是可空的传递进去就OK。


service方法:


我们把这个设置未9pt就OK了。<还是要细心呀>


窗体的几个常见操作


    做技术一定要认真,一点小的失误都不允许。


窗体固定显示到正中央


   StartPosition:CenterScreen



不让其窗体放大放小


   FormBorderStyle :F开头的都可以



取消最大化,最小化


    MaximumBox:False


    MinimizeBox:false

/// <summary>
/// 通过日期,单位,快递公司进行分类查询
/// </summary>
/// <returns></returns>
public IList<Packagelist> GetPackagelistByDateOrCompanyOrStoreAddress(DateTime? startDate,DateTime? endDate,CourierCompany? courierCompany,StoreAddress? storeAddress)
{ 
    var query = this.CrudPackagelist().Table().Where(x=>x.State==false);         //从未取走的包裹中查找
    if (startDate.HasValue || endDate.HasValue)   //  或:一真为真  
    {
        if (startDate.HasValue)
        {
            query = query.Where(x => x.CreateDate >startDate);
        }
        if (endDate.HasValue)
        {
            endDate = DateTime.Parse(endDate.Value.AddDays(1).ToString("yyyy-MM-dd 00:00:00"));
            query = query.Where(x => x.CreateDate <=endDate);         //这是查找某一特定时间的,这个还需要变化。
        }                
    }
    if (courierCompany.HasValue)
    {
        query = query.Where(x => x.CourierCompany == courierCompany);
    }
    if (storeAddress.HasValue)
    {
        query = query.Where(x => x.StoreAddress == storeAddress);
    }
    return query.OrderByDescending(x => x.CreateDate).ToList();
}



调用方法:


/// <summary>
 ///未取包裹查询
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void skinButton2_Click(object sender, EventArgs e)
 {
     DateTime? startDate = null;
     DateTime? endDate = null;
     StoreAddress? storeAddressValue = null;
     CourierCompany? courierCompanyValue = null;
     try
     {
         if (!string.IsNullOrWhiteSpace(skinDate_UnclaimedStart.text))
         {
             startDate = DateTime.Parse(skinDate_UnclaimedStart.text);
         }
         if (!string.IsNullOrWhiteSpace(skinDate_UnclaimedEnd.text))
         {
             endDate = DateTime.Parse(skinDate_UnclaimedEnd.text);
         }
         if (skinStoreAddress.SelectedIndex != 0)
         {
             storeAddressValue = (StoreAddress)Enum.Parse(typeof(StoreAddress), ((ListItem)(skinStoreAddress.SelectedItem)).Text);
         }
         if (skinCourierCompany.SelectedIndex != 0)
         {
             courierCompanyValue = (CourierCompany)Enum.Parse(typeof(CourierCompany), ((ListItem)(skinCourierCompany.SelectedItem)).Text);
         }
         var resultList = plService.GetPackagelistByDateOrCompanyOrStoreAddress(startDate, endDate, courierCompanyValue, storeAddressValue);
         skinNotTakeGuidData.DataSource = resultList;
     }
     catch (Exception ex)
     {                
         Common.MsgBoxInfo("操作失败"+ex.Message);
     }           
 }


一次封装,流程简化的过程


其实上面的代码都把一部分说明了,下面在说一下具体的场景,想从下面的下拉框中选择特定的值,传递后台进行选择查询。但是后台的方法参数是可空的,但是这里可空的转变有问题,不会像bs一样,很直接干脆。


关于枚举转换未下拉列表(SKinComboxBox)的操作:


Type courierCompany = typeof(CourierCompany);
this.skinCourierCompany.Items.Insert(0, "----请选择----");
foreach (int index in Enum.GetValues(courierCompany))
{
    string name = Enum.GetName(courierCompany, index);
    string value = index.ToString();
    ListItem item = new ListItem();
    item.Text = name;
    item.Value = value;
    this.skinCourierCompany.Items.Add(item);
}
this.skinCourierCompany.SelectedIndex = 0;
this.Show();


这里让下拉框第一个显示的是请选择,让直接插入第一个

后台的方法:


courierCompanyValue = (CourierCompany)Enum.Parse(typeof(CourierCompany), ((ListItem)(skinCourierCompany.SelectedItem)).Text);




这样就取到了选中的值,类型是枚举类型,但是要是选择请选择的话,这里的转换就会有错误。表示将可空类型转换不过去,报错误。


我们思路是先那取到的序号进行判断,要是是第一个那个就不进行转换,直接传递Null值就OK,不是就直接传递。下面是我之前的做法:


/// <summary>
/// 查询事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinBtn_Accept_Click(object sender, EventArgs e)
{
    //测试
    StoreAddress storeAddressValue;
    CourierCompany courierCompanyValue;
    if (skinStoreAddress.SelectedIndex != 0 && skinCourierCompany.SelectedIndex != 0) //与:一假为假
    {
        storeAddressValue =(StoreAddress)Enum.Parse(typeof(StoreAddress), ((ListItem)(skinStoreAddress.SelectedItem)).Text);
        courierCompanyValue =(CourierCompany)Enum.Parse(typeof(CourierCompany), ((ListItem)(skinCourierCompany.SelectedItem)).Text);
        resultList = plService.GetPackagelistByDateOrCompanyOrStoreAddress(startDate, endDate, courierCompanyValue,storeAddressValue);
        skinGuidData.DataSource = resultList;
        return;
    }if(skinCourierCompany.SelectedIndex !=0)
    {
        courierCompanyValue = (CourierCompany)Enum.Parse(typeof(CourierCompany), ((ListItem)(skinCourierCompany.SelectedItem)).Text);
    }
    if (skinStoreAddress.SelectedIndex != 0)
    {
        storeAddressValue = (StoreAddress)Enum.Parse(typeof(StoreAddress), ((ListItem)(skinStoreAddress.SelectedItem)).Text); 
    }
    if (skinStoreAddress.SelectedIndex == 0 && skinCourierCompany.SelectedIndex != 0)
    {
        courierCompanyValue =
            (CourierCompany)
                Enum.Parse(typeof(CourierCompany), ((ListItem)(skinCourierCompany.SelectedItem)).Text);
        resultList = plService.GetPackagelistByDateOrCompanyOrStoreAddress(startDate, endDate, courierCompanyValue,
           null);
        skinGuidData.DataSource = resultList;
        return;
    }
    if (skinCourierCompany.SelectedIndex == 0 && skinStoreAddress.SelectedIndex != 0)
    {
        storeAddressValue = (StoreAddress)Enum.Parse(typeof(StoreAddress), ((ListItem)(skinStoreAddress.SelectedItem)).Text);
        resultList = plService.GetPackagelistByDateOrCompanyOrStoreAddress(startDate, endDate,
           null, storeAddressValue);
        skinGuidData.DataSource = resultList;
        return;
    }
    if (skinStoreAddress.SelectedIndex == 0 || skinCourierCompany.SelectedIndex == 0)  //或:一真为真
    {
        resultList = plService.GetPackagelistByDateOrCompanyOrStoreAddress(startDate, endDate, null, null);
        skinGuidData.DataSource = resultList;
        return;
    }    
}            


从之前的代码可以看到很多地方被复用了,没有一点高效代码的意思,在老大的帮助下,知道传递的可以是null值,那么我开始创建类型就赋值未null,要是没有变化就修改,要是有变化就直接传递变量,这样本来他就是Null,就不需要修改了。下面是修改后的代码:


/// <summary>
///未取包裹查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButton2_Click(object sender, EventArgs e)
{
    DateTime? startDate = null;
    DateTime? endDate = null;
    StoreAddress? storeAddressValue = null;
    CourierCompany? courierCompanyValue = null;
    try
    {
        if (!string.IsNullOrWhiteSpace(skinDate_UnclaimedStart.text))
        {
            startDate = DateTime.Parse(skinDate_UnclaimedStart.text);
        }
        if (!string.IsNullOrWhiteSpace(skinDate_UnclaimedEnd.text))
        {
            endDate = DateTime.Parse(skinDate_UnclaimedEnd.text);
        }
        if (skinStoreAddress.SelectedIndex != 0)
        {
            storeAddressValue = (StoreAddress)Enum.Parse(typeof(StoreAddress), ((ListItem)(skinStoreAddress.SelectedItem)).Text);
        }
        if (skinCourierCompany.SelectedIndex != 0)
        {
            courierCompanyValue = (CourierCompany)Enum.Parse(typeof(CourierCompany), ((ListItem)(skinCourierCompany.SelectedItem)).Text);
        }
        var resultList = plService.GetPackagelistByDateOrCompanyOrStoreAddress(startDate, endDate, courierCompanyValue, storeAddressValue);
        skinNotTakeGuidData.DataSource = resultList;
    }
    catch (Exception ex)
    {                
        Common.MsgBoxInfo("操作失败"+ex.Message);
    }           
}


是不是简单多了,就不需要我之前那样一直进行判断了。




    要理解编码是一个多思考,多动手的工作。







目录
相关文章
|
1月前
|
前端开发
前端基础(十四)_隐藏元素的方法
本文介绍了几种在前端开发中隐藏元素的方法,包括使用`display:none`、`visibility:hidden`、`opacity:0`等CSS属性,并提供了相应的示例代码。此外,还提到了其他隐藏元素的技巧,如通过设置元素位置、使用`overflow`属性和`filter`属性以及`rgba`颜色值来实现元素的隐藏。
55 1
前端基础(十四)_隐藏元素的方法
|
2月前
|
C# UED 开发者
WPF打印功能实现秘籍:从页面到纸张,带你玩转WPF打印技术大揭秘!
【8月更文挑战第31天】在WPF应用开发中,打印功能至关重要,不仅能提升用户体验,还增强了应用的实用性。本文介绍WPF打印的基础概念与实现方法,涵盖页面元素打印、打印机设置及打印预览。通过具体案例,展示了如何利用`PrintDialog`和`PrintDocument`控件添加打印支持,并使用`PrinterSettings`类进行配置,最后通过`PrintPreviewWindow`实现打印预览功能。
181 0
|
2月前
|
容器 C# 开发者
XAML语言大揭秘:WPF标记的魅力所在,让你轻松实现界面与逻辑分离,告别复杂代码!
【8月更文挑战第31天】XAML提供了一种直观且易于维护的界面设计方式,使得开发者可以专注于逻辑和业务代码的编写,而无需关心界面细节。通过数据绑定、布局管理和动画效果等特性,XAML可以实现丰富的界面交互和视觉效果。在实际开发过程中,开发者应根据具体需求选择合适的技术方案,以确保应用程序能够满足用户的需求。希望本文的内容能够帮助您在WPF应用程序开发中更好地利用XAML语言。
38 0
|
12月前
|
IDE C# 开发工具
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
54 0
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
306 0
WinForm 中 ISupportInitialize 的用处。
WinForm 中 ISupportInitialize 的用处。
224 0
MFC怎么用代码改变CComboBox的下拉方式?
MFC怎么用代码改变CComboBox的下拉方式?
162 0
|
C# 前端开发 设计模式
WPF设计界面不执行代码
原文:WPF设计界面不执行代码 一般在我们在设计WPF XAML界面时,XAML 引用一些后端的类。比如UserControl、Converter、MVVM,引用 xmlns:ALLUserControl="clr-namespace:程序集名.ALLUserControl;assembly=程序集名"。
1063 0
|
C# 数据格式 XML
WPF整理-使用逻辑资源
原文:WPF整理-使用逻辑资源 "Traditional application resources consist of binary chunks of data, typically representing things such as icons, bitmaps, strings, and XML.
861 0