苏飞论坛

标题: C#皮肤-皮肤使用须知与常见问题解决方案 [打印本页]

作者: 站长苏飞    时间: 2012-11-17 15:08
标题: C#皮肤-皮肤使用须知与常见问题解决方案
读部分
-------------------------------------------------------------------------------------------------------------
C#仿QQ皮肤-实现原理系列文章导航
http://www.sufeinet.com/thread-2-1-1.html

C#仿QQ皮肤-皮肤使用须知与常见问题解决方案
皮肤发布有一段时间了,多多少有一些朋友使用皮肤,也多多少少的也出现了不少问题,在这里我给大家表示歉意了,这些问题我会尽快解决的,因为我个人能力有现,还希望大家能都参与进来,我在这里给大家写点使用方法上,和技巧上的东西,希望能给大家以帮助,我以问答的方法来解决问题吗?1.皮肤的控件为什么不全?
   因为咱们的皮肤还是测试版本,现在只能使用一些常用的控件,其它控件我会尽快的更新上去,希望大家能理解。
2.皮肤的为什么在Windows2003和Visit下有边框,很难看?
   这个问题我正在解决,目前已有几个解决的方法,只是不太理想,大家请等待一下我会尽快解决这个问题,也希望大家尽量先在Xp系统下使用。因为Windows有透明效果所以不太方便处理;
3.皮肤的Combox控件怎么不能同时绑定Value和Text呢?
   大家肯定是也像平时一样这样写代码了吧
[C#] 纯文本查看 复制代码
//_dt_two是您自己加载过来的数据源
            comboBox1.DataSource = _dt_two;
            comboBox1.ValueMember = "id";
            comboBox1.DisplayMember = "name";

如果是正常的控件这样是没有问题的,但是我这个控件把里面的数据绘制了一下,加上了一个光标根随的效果,也应用上了皮肤,这样的话就不能使用这样的语句呢?
目前只能绑定Value值而不能绑定Text值,绑定的text值是不会正常显示的,这样问题我会想办法解决,也希望大家多出建议,我暂时给大家一个可行的方案
  我们可以使用Linq来解决
  大家还像平时写查询方法一样只查出id和name这样一个表
然后在帮助的时间这样绑定
[C#] 纯文本查看 复制代码
//_dt_two是您自己加载过来的数据源
for (int i = 0; i < _dt_two.Rows.Count; i++)
                {
                    comboBox1.Items.Add(_dt_two.Rows["uLogin"].ToString().Trim());
                }

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

大家在想这样写不用只能用Text属性了吗?其实不是的,我提供一个类,大家可以使用他来取得相应的Value值 而不用去查询数据库
[C#] 纯文本查看 复制代码
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();
        }

    }
}

使用方法也很简单
[C#] 纯文本查看 复制代码
string value=UI_Misc_Helper.GetComboBoxValueOrText(comboBox3, _dt_two, "uLogin", "uId");

这中间自然 是会有一些问题比如说有同名的就不好办了,如果真是那样的话就不建议大家使用这个了,不好意思 目前只能先到这里,也希望大家帮助我修改一下,并把解决方法告诉我,先谢谢
4.为什么我又加了一些控件会就都 不管用了?
  呵,在这里我是不建议大家修改的,因为现在还是测试,有很多东西不完整,所以大家不要自己重写和改动,谢谢大家配合;
       注:希望大家有什么好的建议和意见,提供给我,很是感谢,可以给我留言或是QQ联系我;如果大家在使用过程中还有其实问题的话可以直接在这里反应;
5.窗体不能居中怎么办?
  这个暂时给大家一段代码吧, 我们在下次版本更新到窗体里
[C#] 纯文本查看 复制代码
his.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.这个皮肤下载了之后怎么用啊?
     下载完成之后是这样的
    (, 下载次数: 275)