代码改变世界

C#仿QQ皮肤-皮肤使用须知与常见问题解决方案

2010-04-16 15:02  苏飞  阅读(7137)  评论(1编辑  收藏  举报

-------------------------------------------------------------------------------------------------------------
C#仿QQ皮肤-实现原理系列文章导航
http://www.cckan.net/thread-2-1-1.html 

C#论坛同步地址:http://www.cckan.net/thread-1215-1-1.html

                                                       C#仿QQ皮肤-皮肤使用须知    

 

              皮肤发布有一段时间了,多多少有一些朋友使用皮肤,也多多少少的也出现了不少问题,在这里我给大家表示歉意了,这些问题我会尽快解决的,因为我个人能力有现,还希望大家能都参与进来,我在这里给大家写点使用方法上,和技巧上的东西,希望能给大家以帮助,我以问答的方法来解决问题吗?

1.皮肤的控件为什么不全?

   因为咱们的皮肤还是测试版本,现在只能使用一些常用的控件,其它控件我会尽快的更新上去,希望大家能理解。

 

2.皮肤的为什么在Windows2003和Visit下有边框,很难看?

   这个问题我正在解决,目前已有几个解决的方法,只是不太理想,大家请等待一下我会尽快解决这个问题,也希望大家尽量先在Xp系统下使用。因为Windows有透明效果所以不太方便处理;

 

3.皮肤的Combox控件怎么不能同时绑定Value和Text呢?

   大家肯定是也像平时一样这样写代码了吧

 //_dt_two是您自己加载过来的数据源
            comboBox1.DataSource = _dt_two;
            comboBox1.ValueMember 
= "id";
            comboBox1.DisplayMember 
= "name";

 

如果是正常的控件这样是没有问题的,但是我这个控件把里面的数据绘制了一下,加上了一个光标根随的效果,也应用上了皮肤,这样的话就不能使用这样的语句呢?

目前只能绑定Value值而不能绑定Text值,绑定的text值是不会正常显示的,这样问题我会想办法解决,也希望大家多出建议,我暂时给大家一个可行的方案

  我们可以使用Linq来解决

  大家还像平时写查询方法一样只查出id和name这样一个表

然后在帮助的时间这样绑定

代码
 //_dt_two是您自己加载过来的数据源
 for (int i = 0; i < _dt_two.Rows.Count; i++)
                {
                    comboBox1.Items.Add(_dt_two.Rows[i][
"uLogin"].ToString().Trim());
                }

                
//设置当前项
                if (comboBox1.Items.Count != 0)
                {
                    comboBox1.SelectedIndex 
= 0;
                }

 

大家在想这样写不用只能用Text属性了吗?其实不是的,我提供一个类,大家可以使用他来取得相应的Value值 而不用去查询数据库

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace BaseFunction
{
    
/// <summary>
    
/// 处理一些控件的方法
    
/// </summary>
    public class UI_Misc_Helper
    {
        
/// <summary>
        
/// 返回选中的Comobox中Text对应的value值或者是value对应的Text值
        
/// </summary>
        
/// <param name="combobox">combobox对象</param>
        
/// <param name="dt_tables">要查询的表</param>
        
/// <param name="Text">要查询的字段</param>
        
/// <param name="Value">要返回的字段</param>
        
/// <returns>int</returns>
        public static string GetComboBoxValueOrText(CRD.WinUI.Misc.ComboBox combobox, DataTable dt_tables, string Text, string Value)
        {
            
//从dt_tables中查询出来Text对应是Value值
            var result = dt_tables.AsEnumerable().Where(fi => fi[Text.ToString().Trim()].ToString().Trim() 
                
== combobox.Text.ToString().Trim()).FirstOrDefault();
            
//把Value值返回
            return result[Value.ToString().Trim()].ToString().Trim();
        }

    }
}

 

  使用方法也很简单

 

string value=UI_Misc_Helper.GetComboBoxValueOrText(comboBox3, _dt_two, "uLogin""uId");

 

  这中间自然 是会有一些问题比如说有同名的就不好办了,如果真是那样的话就不建议大家使用这个了,不好意思 目前只能先到这里,也希望大家帮助我修改一下,并把解决方法告诉我,先谢谢

 

4.为什么我又加了一些控件会就都 不管用了?

  呵,在这里我是不建议大家修改的,因为现在还是测试,有很多东西不完整,所以大家不要自己重写和改动,谢谢大家配合;

       注:希望大家有什么好的建议和意见,提供给我,很是感谢,可以给我留言或是QQ联系我;如果大家在使用过程中还有其实问题的话可以直接在这里反应;

 

 5.窗体不能居中怎么办?

  这个暂时给大家一段代码吧, 我们在下次版本更新到窗体里

 

代码
 this.Location = new Point((System.Windows.Forms.Screen.GetWorkingArea(this).Size.Width - this.Width) / 2,
                    (System.Windows.Forms.Screen.GetWorkingArea(
this).Size.Height - this.Height) / 2);

 

6.这个皮肤下载了之后怎么用啊?

     下载完成之后是这样的

         

第一个文件夹ClientSystem是一个例子,其实两个项目是皮肤的组成部分我们只要加入到项目里就行了,全是源代码大家可以自己查看,再调用主窗体的时候有一点和平时的不同代码我放下面大家一看就知道 了

 

 Main main = new Main();
 CRD.WinUI.Shared.MainForm 
= main;
 main.Show();