小编Fue*_*led的帖子

在Windows窗体应用程序中保存应用程序设置的最佳实践

我想要实现的非常简单:我有一个Windows窗体(.NET 3.5)应用程序,它使用一个路径来读取信息.用户可以使用我提供的选项表单修改此路径.

现在,我想将路径值保存到文件中供以后使用.这将是保存到此文件的众多设置之一.该文件将直接位于应用程序文件夹中.

我理解有三种选择:

  • ConfigurationSettings文件(appname.exe.config)
  • 注册处
  • 自定义XML文件

我读到.NET配置文件没有预见到将值保存回来.至于注册表,我想尽可能远离它.

这是否意味着我应该使用自定义XML文件来保存配置设置?如果是这样,我希望看到代码示例(C#).

我已经看过关于这个问题的其他讨论,但我仍然不清楚.

c# xml configuration-files application-settings winforms

561
推荐指数
11
解决办法
43万
查看次数

LINQ to Entities不支持指定的类型成员.仅支持初始值设定项,实体成员和实体导航属性

var result =
    (from bd in context.tblBasicDetails
     from pd in context.tblPersonalDetails.Where(x => x.UserId == bd.UserId).DefaultIfEmpty()
     from opd in context.tblOtherPersonalDetails.Where(x => x.UserId == bd.UserId).DefaultIfEmpty()
     select new clsProfileDate()
     {
         DOB = pd.DOB
     });

foreach (clsProfileDate prod in result)
{
    prod.dtDOB = !string.IsNullOrEmpty(prod.DOB) ? Convert.ToDateTime(prod.DOB) : DateTime.Today;
    int now = int.Parse(DateTime.Today.ToString("yyyyMMdd"));
    int dob = int.Parse(prod.dtDOB.ToString("yyyyMMdd"));
    string dif = (now - dob).ToString();
    string age = "0";
    if (dif.Length > 4)
    age = dif.Substring(0, dif.Length - 4);
    prod.Age = Convert.ToInt32(age);
}

GetFinalResult(result);
Run Code Online (Sandbox Code Playgroud)
protected void GetFinalResult(IQueryable<clsProfileDate> …
Run Code Online (Sandbox Code Playgroud)

linq-to-entities entity-framework-4

65
推荐指数
3
解决办法
9万
查看次数

C#与IEnumerable <T>的区别在于自定义IEqualityComparer

这就是我想要做的.我正在使用LINQ to XML查询XML文件,它为我提供了一个IEnumerable <T>对象,其中T是我的"Village"类,填充了此查询的结果.有些结果是重复的,所以我想在IEnumerable对象上执行Distinct(),如下所示:

public IEnumerable<Village> GetAllAlliances()
{
    try
    {
        IEnumerable<Village> alliances =
             from alliance in xmlDoc.Elements("Village")
             where alliance.Element("AllianceName").Value != String.Empty
             orderby alliance.Element("AllianceName").Value
             select new Village
             {
                 AllianceName = alliance.Element("AllianceName").Value
             };

        // TODO: make it work...
        return alliances.Distinct(new AllianceComparer());
    }
    catch (Exception ex)
    {
        throw new Exception("GetAllAlliances", ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于默认的比较器不适用于Village对象,我实现了一个自定义的比较器,如AllianceComparer类中所示:

public class AllianceComparer : IEqualityComparer<Village>
{
    #region IEqualityComparer<Village> Members
    bool IEqualityComparer<Village>.Equals(Village x, Village y)
    {
        // Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable distinct linq-to-xml

52
推荐指数
3
解决办法
4万
查看次数

"{Binding Path =.}"和"{Binding}"是否真的相等

在我的WPF项目中,我有一个ListBox来显示List<string>集合中的项目.我想让这些项目的文本可编辑,所以我将每个项目包装在带有TextBox的ItemTemplate中(可能不是最好的方法,但我是WPF的新手).我只是将TextBoxes的Text属性绑定到每个项的值时遇到了麻烦.我最后偶然发现了一个使用单个点或句点作为其Path属性({Binding Path=.})的示例:

<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Path=.}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

但是我不明白为什么单纯使用{Binding}不起作用.

根据微软的说法,它提出了" 双向绑定需要Path或XPath "的例外情况:

[...]句点(.)路径可用于绑定到当前源.例如,Text ="{Binding}"等同于Text ="{Binding Path =.}"

有人可以阐明这种模棱两可的行为吗?

编辑:此外,它似乎{Binding Path=.}不一定提供双向绑定,因为修改文本和移动焦点不会更新底层源(相同的源也具有在DataGrid控件上显示和成功修改的属性).我肯定在这里遗漏了一些东西.

wpf xaml binding path

46
推荐指数
4
解决办法
3万
查看次数

C#更新绑定到通用列表的组合框

我的表单上有一个组合框,它绑定到一个通用的字符串列表,如下所示:

private List<string> mAllianceList = new List<string>();

private void FillAllianceList()
{
    // Add alliance name to member alliance list
    foreach (Village alliance in alliances)
    {
        mAllianceList.Add(alliance.AllianceName);
    }

    // Bind alliance combobox to alliance list
    this.cboAlliances.DataSource = mAllianceList;
}
Run Code Online (Sandbox Code Playgroud)

然后,用户可以在组合框中添加或移除项目.
我在其他地方读到,通过简单地添加或删除通用列表中的项目,组合框的内容应该自动更新; 如果我对它使用Sort(),应该会发生同样的事情.
但由于某种原因,我无法做到这一点.我可以看到组合框的DataSource属性在添加/删除/排序项时正确更新,但组合框中显示的内容不是DataSource属性中的内容.

我肯定错过了什么或做错了什么.
提前致谢!

编辑:
我选择的答案解决了添加和删除的问题,但BindingList对象无法排序,这对我来说是必要的.我找到了一个解决方案,通过继承BindingList和添加排序功能来构建自定义类,但我想知道在我的情况下是否有更简单的解决方案.
关于如何轻松解决这个问题的任何建议?

c# combobox datasource generic-list

13
推荐指数
1
解决办法
4万
查看次数

在.NET框架中,为什么有PointF(float)而没有"PointD"(double)?

谁能解释为什么在.NET框架中有PointF结构(使用单精度float类型)而没有"PointD"(使用双精度double类型)?

他们是否确定在System.Drawing命名空间中这样的精度永远不会有意义?还有其他原因吗?

.net floating-point double graphics system.drawing

12
推荐指数
1
解决办法
1062
查看次数

如何继承资源文件(resx)

想象一下,你正在开发一个由数百个程序集组成的.Net 4.0项目,每个程序集都有自己的资源文件(.resx)用于本地化.通过使用ResXFileCodeGenerator(创建"ResourceFile.Designer.cs"文件)自动生成的类,从C#访问本地化字符串:string test = ResourceFile.TestString;

每个程序集都有特定于它的本地化字符串,但是有些字符串对所有程序集都是通用的.您告诉自己,在"父"资源文件中使用这些"公共字符串"会很好,如果资源键在"本地"资源文件中不可用,代码将在该文件中回退.然后你说"嘿!继承可以在这里工作." 事实上,在自动生成的设计器文件中执行类似的操作确实有效: internal class ResourceFile : ParentResourceFile 也就是说,仍然可以使用ResourceFile未定义但定义的字符串.ParentResourceFileResourceFile.StringInParentFile

但是设计器文件标题中的某些内容会让您感到麻烦:" 对此文件的更改可能会导致错误的行为,如果重新生成代码,则会丢失. "另外,您知道在自动生成的设计器文件中播放是不受欢迎的.所以你来到这里,你问:

  • ResXFileCodeGenerator何时生成/重新生成设计器类?
  • 有没有办法关闭那个自动生成?
  • 我们是否必须放弃ResXFileCodeGenerator的优点并实现我们自己的ResourceManager处理?

你说"谢谢你".

c# inheritance resx resource-files

10
推荐指数
1
解决办法
3329
查看次数

VB6是否支持无符号数据类型?

为了与我的一位同事结算赌注,我想知道VB6本身是否支持任何未签名的数据类型.

我认为答案是"不",但我似乎无法找到任何证实这一点的官方文件.一个简单的链接到Microsoft文档将是一个可接受的答案; 关于为什么不支持这些类型的历史理由将是一个额外的奖励.

vb6 unsigned

6
推荐指数
1
解决办法
2万
查看次数

C# Combobox (Dropdownstyle = Simple) -- 如何在键入时选择项目

我的表单(WinForms、.NET 3.5)上有一个 Combobox 控件,它的DropDownStyle属性设置为Simple。假设它用字母表中的字母填充,作为字符串对象(“a”、“b”、“c”等)。
当我在组合框的输入字段中键入一个字母时,正确的项目将显示在下方。

这是我想要的行为。但我也想选择第一个匹配项。

是否有 Combobox 控件的属性可以实现这一点?还是我需要以编程方式处理?

c# combobox

5
推荐指数
1
解决办法
2万
查看次数

如何使用C#在ListView中对齐单个子项的文本?

关于这个看似简单的主题,我无法找到答案:是否可以在WinForms ListView控件中对齐单个子项的文本?

如果是这样,怎么样?

我希望同一列中的文本以不同方式对齐.

c# listview text-alignment

5
推荐指数
4
解决办法
3万
查看次数

如何在C#2.0中从另一个中减去一个通用列表

首先,我很可能是以错误的方式处理我的问题,在这种情况下,我很乐意接受替代方案.

我想要实现的是检测USB设备连接到计算机后创建的驱动器.

这是简化的工作流程:

// Get list of removable drives before user connects the USB cable
List<string> listRemovableDrivesBefore = GetRemovableDriveList();

// Tell user to connect USB cable
...

// Start listening for a connection of a USB device
...

// Loop until device is connected or time runs out
do
{
    ...
} while

// Get list of removable drives after USB device is connected
List<string> listRemovableDrivesAfter = GetRemovableDriveList();

// Find out which drive was created after USB has been connected …
Run Code Online (Sandbox Code Playgroud)

c# windows generic-list device-driver c#-2.0

5
推荐指数
1
解决办法
6704
查看次数