我是一名C#开发人员,正在尝试使用JavaScript,我正试图让我的头脑在我的范围内:)
我有以下代码,其中包含addEventListener
我想要使用我的对象中的字段:
(function(window) {
function Keyboard() {
this.keys = {};
}
Keyboard.prototype.handle_keydown = function(args) {
this.keys[args.keyCode] = true;
}
Keyboard.prototype.listen = function() {
window.addEventListener('keydown', this.handle_keydown);
}
app.util.keyboard = new Keyboard();
})(window);
Run Code Online (Sandbox Code Playgroud)
我想在我的hander中使用keys数组,但是理解我无法访问是通过使用它,因为这是该上下文中的窗口(正确吗?).如果我改成它
app.util.keyboard.keys[args.keyCode] = true;
Run Code Online (Sandbox Code Playgroud)
它有效,但我不确定这是一个很好的解决方法.
我发现这个问题似乎很相似,但我不确定如何将它融入我的例子中.
谢谢你的帮助!
我们已经注意到我们的生产数据中有一些奇怪的行为,这些行为涉及我们从.Net DataSet存储到Oracle RAW列的GUID.
我们有以下设置:
当在表A的函数中创建表A时,ResponsibleObjectId列填充表A的ID(并非总是如此,因此列上没有FK).
这发生在我们的.Net服务器层.这两个表位于2个单独的DataSet中.然后将这2个数据集保存到oracle DB(11g).
大部分时间都有效,但在少数情况下(如1/10.000.000行),生成的guid不完全相同:
ResponsibleObjectId ID
665B8FFDE5A04163A96D96A25702665B 665B8FFDE5A04163A96D96A257023065
325C8AB000434503B8D2F980B33B325C 325C8AB000434503B8D2F980B33B4B58
AF831B5207E04D2ABE0E3ADAC802AF83 AF831B5207E04D2ABE0E3ADAC8023FA1
88DD5AF244DC4EA08075DB53CA1988DD 88DD5AF244DC4EA08075DB53CA19072E
75A5E5111DEE4021BA6EB016178775A5 75A5E5111DEE4021BA6EB01617876E66
Run Code Online (Sandbox Code Playgroud)
他们匹配,期待最后4个字符.
我们使用存储过程保存GUID,如下所示:
.Net DAL
OracleCommand cmdSpInsert = (OracleCommand)database.GetStoredProcCommand("PKG_TableB.InsertTableB");
database.AddInParameter(cmdSpInsert, "PAR_ResponsibleObjectId", DbType.StringFixedLength, 36, "ResponsibleObjectId", DataRowVersion.Current);
Run Code Online (Sandbox Code Playgroud)
Oracle SP
PROCEDURE InsertTableB
(
...
PAR_ResponsibleObjectId IN CHAR,
...
)
IS BEGIN
INSERT INTO StockMov
(
...
HEXTORAW(REPLACE(UPPER(PAR_ResponsibleObjectId), '-','')),
...
);
END InsertTableB;
Run Code Online (Sandbox Code Playgroud)
我们不知道造成这种奇怪行为的原因.我们已经在表A中的2个不同列上看到它发生在一个类似的情况下,所以它似乎与表B没有特别的关系.
如果需要任何额外信息,请询问,我会更新问题.
任何帮助都非常感谢我们解开我们的神秘面纱!:)
编辑 正如评论中所要求的,ResponsibleObjectId列的赋值非常简单,如下所示:
dataSetB.ResponsibleObjectId = dataSetA.Id
Run Code Online (Sandbox Code Playgroud)
两个数据集也保存在同一个事务中.
我正在使用C#构建一个Windows 10通用应用程序,它必须列出系统上已安装字体的名称.该应用程序是一个地铁/现代ui/windows 8.1应用程序,我使用SharpDX'技巧'来获取名称.
对于Windows 10 UAP,SharpDX不可用(但是?),因此不再适用.
有没有其他方法来实现我的目标?我应该考虑所描述的字体名称的固定列表这里在推荐的字体?例如,在桌面上这似乎相当有限.
提前致谢!
原始用例:
这是我正在尝试解决的一个可能用例:
预期:日历显示现在日期
实际:(仅在 SelectedDate 上绑定)日历只移动其选定的日期,但保持显示先前选定的月份
我的解决方案:
在 MVVM 场景中,我展示了一个Calendar
控件,其 SelectedDate 绑定到SelectedDate
我的 ViewModel 中的一个属性。我的 VM 中的属性在PropertyChanged
设置时触发它的事件。
在我的 VM 中选择的日期也可以从我的代码中的其他部分设置,所以我希望我的日历始终显示所选日期(例如,当另一个月被设置为所选日期时,我希望我的日历切换到那个月)。为了获得这种行为,我还将DisplayDate
日历的属性绑定到我的 SelectedDate 属性,这给了我预期的行为,除非我单击上个月或下个月的灰色日期。
这是我的 XAML 日历:
<Calendar SelectedDate="{Binding Path=SelectedDate}" DisplayDate="{Binding Path=SelectedDate}" />
Run Code Online (Sandbox Code Playgroud)
这是SelectedDate
我的 ViewModel 中的属性(实现INotifyPropertyChanged
)
public DateTime SelectedDate
{
get
{
return selectedDate;
}
set
{
selectedDate = value;
this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedDate"));
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案的问题:
显然,单击灰色日期会导致SelectedDate
在鼠标按下时设置,然后在鼠标抬起时再次设置,这会导致选择两个月后的日期。
有没有更好的方法来实现这种行为?或者我可以解决 DisplayDate 问题(没有太多的黑客攻击,意味着代码后面没有/尽可能少的代码)?
我真正想要的是一个SelecteDate …
我有一个Windows 8.1 C#应用程序,显示一个带有相当大的文本框的页面(几乎涵盖了所有页面;它是一个写作应用程序).
当屏幕键盘出现时,它覆盖了文本框的一半.我想调整文本框(甚至整个页面)的大小,以便它不被键盘覆盖.
我现在正在使用静态InputPane并订阅其显示和隐藏事件来实现此目的.然后我尝试使用eventargs中提供的带有方框的矩形来更改文本框的边距.这是有效的,但由于我的页面仍然是屏幕的高度,因此它将其向下滚动到底部.
public MainPage()
{
var inputPane = InputPane.GetForCurrentView();
inputPane.Showing += this.InputPaneShowing;
inputPane.Hiding += this.InputPaneHiding;
}
void InputPaneHiding(InputPane sender, InputPaneVisibilityEventArgs args)
{
this.EditBox.Margin = new Thickness();
}
private void InputPaneShowing(InputPane sender, InputPaneVisibilityEventArgs args)
{
this.EditBox.Margin = new Thickness(0, 0, 0, args.OccludedRect.Height);
}
Run Code Online (Sandbox Code Playgroud)
在尝试这一点时,我感觉这不是理想的解决方案,但我没有更好的主意.理想情况下,我认为当你需要打开应用程序时,它会像垂直分割一样,但是底部的键盘是水平的,而应用程序只是键盘上方的可用尺寸.
知道这是否可行?