我有一个
BindingList<T>
Run Code Online (Sandbox Code Playgroud)
绑定到datagridview.我班上的一个属性需要很长时间来计算,所以我对这个动作进行了操作.在计算之后,我引发OnPropertyChanged()事件以通知网格值已准备好.
至少,这就是理论.但是,由于从一个差异线程调用了OnPropertyChanged方法,我在网格的OnRowPrePaint方法中得到了一些已经存在的异常.
任何人都可以告诉我如何在主线程中推出OnPropertyChanged事件吗?我不能使用Form.Invoke,因为类MyClass不知道它在Winforms应用程序中运行.
public class MyClass : INotifyPropertyChanged
{
public int FastMember {get;set;}
private int? slowMember;
public SlowMember
{
get
{
if (slowMember.HasValue)
return slowMember.Value;
else
{
Thread t = new Thread(getSlowMember);
t.Start();
return -1;
}
}
}
private void getSlowMember()
{
Thread.Sleep(1000);
slowMember = 5;
OnPropertyChanged("SlowMember");
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangingEventHandler eh = PropertyChanging;
if (eh != null)
{
eh(this, e);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Paypal Adaptive Payments设置应用程序.
我目前正在实施对Preapproval的调用,并且规范说StartDate不能在今天之前.
考虑到这一点......他们在哪个时区验证这个?
API SDK在示例中具有以下内容:
$currDate = getdate();
$startDate = $currDate['year'].'-'.$currDate['mon'].'-'.$currDate['mday'];
$startDate = strtotime($startDate);
$startDate = date('Y-m-d', mktime(0,0,0,date('m',$startDate),date('d',$startDate),date('Y',$startDate)));
$endDate = add_date($startDate, 1);
Run Code Online (Sandbox Code Playgroud)
但是,根据发送请求的服务器的时区,该日期可能会有所不同.
任何人都对如何确保不会发生任何问题有任何想法?
编辑w/Bounty:
截至12月15日,我们现在遇到这个错误.我们正在使用UTC时间,一旦它在UTC中开启新的一天,付款开始失败.
我在以下地方使用上面的代码:
$preapprovalRequest->startingDate = $startDate;
$preapprovalRequest->endingDate = $endDate;
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能做到这一点?
编辑2:
是的时区设置为UTC,我们故意这样做,以便我们的数据库中的所有时间信息都是在没有时区的情况下存储的.
基本上我正在试图弄清楚如何指定我发送给Paypal的日期是UTC,而不是他们恰好在什么时区.
编辑3:
有API,它说如下
startingDate和endingDate可以是eiter Zulu或GMT偏移格式.如以下各自的例子:2010-09-10Z 2010-09-10T17:24:03.874-07:00
基本上我需要上面的代码,输出类似指定我正在使用UTC的东西......
从Google代码下载了ASE,并正在浏览教程和可用脚本。
我找到了我想尝试的脚本,但是复制粘贴会删除所有空格(这是Python脚本...)。
有没有一种简单的方法可以将脚本从互联网下载到Android脚本环境中?
由于无法解决问题,我正在重新发布这个问题(原文在这里).
在TreeView,ListBox中,或者似乎从我的谷歌搜索任何带有ScrollBar的东西,ScrollBar不被视为控件的一部分.
我有一个TreeView,我将其放入自定义控件,它是Dock Fill.因此,它充当自定义TreeView,它具有我们在一个地方管理它的所有逻辑.
在我们的程序的一部分中,我们基于MouseEnter事件将其滑出,然后将其滑回到MouseLeave事件中,但是我们当前正在使用第三方库的TreeView,我已经负责替换它.
所以我已经把所有东西都移到了Windows TreeView上,但是如果它离开整个TreeView,包括滚动条,就找不到可靠捕获MouseLeave -only-的方法.
我已经看到了一个将它包装在一个带有几个像素的面板中并且捕获面板的MouseLeave的一个hackish解决方案,但我几乎不相信这是微软在这种情况下打算做的.
简而言之:
ScrollBar不会为控件触发MouseEnter或MouseLeave,这使得使用MouseEnter/MouseLeave滑出控件不可用,因为用户无法使用ScrollBar.
处理这种情况的首选方法是什么?
在上一个问题中,我获得了使用Spy ++的建议并尝试附加到WndProc()以处理ScrollBar的MouseEnter/MouseLeave.
但这并不起作用,因为Spy ++显示的消息没有在窗体级别或控件级别的WndProc()中触发.这就好像.NET无法看到ScrollBar.
对于这样一个简单的请求,使用WndProc()似乎也不现实,有没有其他方法可以做到这一点,或者如果WndProc()是唯一的方法,有没有人真正能够实现这一点并告诉我如何?
我有一个独立的解决方案(任何其他项目中都没有使用DLL,因此不必担心在其他地方使用的方法).
我正在试图找出一种方法来确定根本没有使用的每个方法/属性.
所以我不能只看私有方法/属性,我还需要检查Public方法和属性.
我过去使用过一个程序来完成这项工作,但仅限于私有方法/属性(它保证的东西不被其他项目使用).即使我记得它是什么,它也无法满足我的需求.
我看过nDepend,但不确定这是否是应用程序中的标准内容,或者我是否需要为它编写自定义CQL语句.
有没有人知道这样做的应用程序,或者如果nDepend可以做到这一点,在nDepend中做多难?
我正在处理的应用程序有很多枚举.
这些值通常从应用程序中的下拉列表中选择.
存储这些值的字符串描述的普遍接受的方式是什么?
以下是当前的问题:
Public Enum MyEnum
SomeValue = 1
AnotherValue = 2
ObsoleteValue = 3
YetAnotherValue = 4
End Enum
Run Code Online (Sandbox Code Playgroud)
下拉列表应具有以下选项:
Some Value
Another Value
Yet Another Value (Minor Description)
Run Code Online (Sandbox Code Playgroud)
并非所有符合枚举的名称,(一个的小描述都是示例),并非所有枚举值都是-current-值.有些仅用于向后兼容和显示目的(即打印输出,而不是表单).
这导致以下代码情况:
For index As Integer = 0 To StatusDescriptions.GetUpperBound(0)
' Only display relevant statuses.
If Array.IndexOf(CurrentStatuses, index) >= 0 Then
.Items.Add(New ExtendedListViewItem(StatusDescriptions(index), index))
End If
Next
Run Code Online (Sandbox Code Playgroud)
这似乎可以做得更好,我不知道如何.
是否有任何字符用HTML编码而不是XML编码,反之亦然?
他们之间的所有编码是否相同?喜欢> 大于符号?
我已经分开了一个测试,以确定两个计划项目是否重叠,因为它的不可读性.
是否有任何应用程序可以帮助简化逻辑语句?
示例:(最初是一个错误的示例,但是暴露了我请求的原因)
if (x < y && y < z && x < z)
Run Code Online (Sandbox Code Playgroud)
可以减少到
if (x < y && y < z)
Run Code Online (Sandbox Code Playgroud)
我的代码是:
return (shift.Start <= shift2.Start && shift.End >= shift2.End) || (shift2.Start <= shift.Start && shift2.End >= shift.Start)
Run Code Online (Sandbox Code Playgroud)
我希望能够更简单,我相信这是可能的,只是不确定如何.
看到这是真正与语言无关的,即使转换到不同的脚本来寻找可能性也会很好,例如,不需要它在C#中.
我正在通过CodeBetter.com 阅读商业基元并且正在考虑这个想法.
以他的Money为例,如何以类似于常规值类型的方式实现它?
我的意思是这样做:
Money myMoney = 100.00m;
Run Code Online (Sandbox Code Playgroud)
代替:
Money myMoney = new Money(100.00m);
Run Code Online (Sandbox Code Playgroud)
我理解如何覆盖所有操作符以允许执行数学等功能,但我不知道需要重写什么以允许我正在尝试做的事情.
这样做的想法是最小化实现新类型时所需的代码更改,并保持与原始类型相同的想法,只需使用不同的值类型名称和业务逻辑功能.
理想情况下,我会继承Integer/Float/Decimal或任何需要的东西,并根据需要覆盖,但显然结构不可用.
我最近开始使用ASP.NET开发,并且从PHP背景开始,我使用<%%>将代码洒入aspx页面来控制逻辑.
我不是在讨论仅仅使用代码背后的最佳实践,但在这方面有利的一点是我遇到的问题.
每当我进入一个页面的设计视图时,就像我提到的那样在aspx文件中有代码,并进行修改,随机地将所有<%%>块-shift-放在我的aspx中,看起来像是随机点.
这显然是皇室般地混淆了我的控制逻辑,并且在将所有内部代码重做10次以上之后(是的,我懒得咬掉子弹并将其转移到代码后面),我真的很好奇Visual Studio如何能够犯这样的错误?
它甚至可以完全删除一些<%%>块(导致我的代码中缺少紧密括号).
如果有人可以帮我解决这个问题,或者知道它无法解决,我将非常感谢你.
.net ×5
c# ×2
winforms ×2
android ×1
asp.net ×1
controls ×1
datagridview ×1
enumeration ×1
html ×1
ndepend ×1
paypal ×1
php ×1
readability ×1
refactoring ×1
scrollbar ×1
struct ×1
timezone ×1
xml ×1