我想要实现的非常简单:我有一个Windows窗体(.NET 3.5)应用程序,它使用一个路径来读取信息.用户可以使用我提供的选项表单修改此路径.
现在,我想将路径值保存到文件中供以后使用.这将是保存到此文件的众多设置之一.该文件将直接位于应用程序文件夹中.
我理解有三种选择:
我读到.NET配置文件没有预见到将值保存回来.至于注册表,我想尽可能远离它.
这是否意味着我应该使用自定义XML文件来保存配置设置?如果是这样,我希望看到代码示例(C#).
我已经看过关于这个问题的其他讨论,但我仍然不清楚.
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 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) 在我的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控件上显示和成功修改的属性).我肯定在这里遗漏了一些东西.
我的表单上有一个组合框,它绑定到一个通用的字符串列表,如下所示:
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和添加排序功能来构建自定义类,但我想知道在我的情况下是否有更简单的解决方案.
关于如何轻松解决这个问题的任何建议?
谁能解释为什么在.NET框架中有PointF
结构(使用单精度float
类型)而没有"PointD"(使用双精度double
类型)?
他们是否确定在System.Drawing命名空间中这样的精度永远不会有意义?还有其他原因吗?
想象一下,你正在开发一个由数百个程序集组成的.Net 4.0项目,每个程序集都有自己的资源文件(.resx)用于本地化.通过使用ResXFileCodeGenerator(创建"ResourceFile.Designer.cs"文件)自动生成的类,从C#访问本地化字符串:string test = ResourceFile.TestString;
每个程序集都有特定于它的本地化字符串,但是有些字符串对所有程序集都是通用的.您告诉自己,在"父"资源文件中使用这些"公共字符串"会很好,如果资源键在"本地"资源文件中不可用,代码将在该文件中回退.然后你说"嘿!继承可以在这里工作." 事实上,在自动生成的设计器文件中执行类似的操作确实有效:
internal class ResourceFile : ParentResourceFile
也就是说,仍然可以使用ResourceFile
未定义但定义的字符串.ParentResourceFile
ResourceFile.StringInParentFile
但是设计器文件标题中的某些内容会让您感到麻烦:" 对此文件的更改可能会导致错误的行为,如果重新生成代码,则会丢失. "另外,您知道在自动生成的设计器文件中播放是不受欢迎的.所以你来到这里,你问:
你说"谢谢你".
为了与我的一位同事结算赌注,我想知道VB6本身是否支持任何未签名的数据类型.
我认为答案是"不",但我似乎无法找到任何证实这一点的官方文件.一个简单的链接到Microsoft文档将是一个可接受的答案; 关于为什么不支持这些类型的历史理由将是一个额外的奖励.
我的表单(WinForms、.NET 3.5)上有一个 Combobox 控件,它的DropDownStyle属性设置为Simple。假设它用字母表中的字母填充,作为字符串对象(“a”、“b”、“c”等)。
当我在组合框的输入字段中键入一个字母时,正确的项目将显示在下方。
这是我想要的行为。但我也想选择第一个匹配项。
是否有 Combobox 控件的属性可以实现这一点?还是我需要以编程方式处理?
关于这个看似简单的主题,我无法找到答案:是否可以在WinForms ListView控件中对齐单个子项的文本?
如果是这样,怎么样?
我希望同一列中的文本以不同方式对齐.
首先,我很可能是以错误的方式处理我的问题,在这种情况下,我很乐意接受替代方案.
我想要实现的是检测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# ×7
combobox ×2
generic-list ×2
.net ×1
binding ×1
c#-2.0 ×1
datasource ×1
distinct ×1
double ×1
graphics ×1
ienumerable ×1
inheritance ×1
linq-to-xml ×1
listview ×1
path ×1
resx ×1
unsigned ×1
vb6 ×1
windows ×1
winforms ×1
wpf ×1
xaml ×1
xml ×1