小编Raf*_*Raf的帖子

Javascript范围addEventListener和this

我是一名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)

它有效,但我不确定这是一个很好的解决方法.

我发现这个问题似乎很相似,但我不确定如何将它融入我的例子中.

谢谢你的帮助!

javascript scope this addeventlistener

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

存储在oracle中的GUID/RAW几乎匹配,除了最后4个字符

我们已经注意到我们的生产数据中有一些奇怪的行为,这些行为涉及我们从.Net DataSet存储到Oracle RAW列的GUID.

我们有以下设置:

  • 表A具有RAW列Id
  • 表B有一个RAW列ResponsibleObjectId

当在表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)

两个数据集也保存在同一个事务中.

.net c# oracle guid

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

列出Windows 10 Universal App中安装的字体名称

我正在使用C#构建一个Windows 10通用应用程序,它必须列出系统上已安装字体的名称.该应用程序是一个地铁/现代ui/windows 8.1应用程序,我使用SharpDX'技巧'来获取名称.

对于Windows 10 UAP,SharpDX不可用(但是?),因此不再适用.

有没有其他方法来实现我的目标?我应该考虑所描述的字体名称的固定列表这里在推荐的字体?例如,在桌面上这似乎相当有限.

提前致谢!

c# fonts sharpdx win-universal-app windows-10

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

日历绑定 SelectedDate 和 DisplayDate:灰色日期

原始用例:

这是我正在尝试解决的一个可能用例:

  1. 用户打开页面,我的日历设置为现在日期
  2. 用户选择几个月前的日期
  3. 用户刷新页面,导致 VM 中选定的日期重置为当前日期

预期:日历显示现在日期

实际:(仅在 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 …

.net c# wpf calendar mvvm

3
推荐指数
1
解决办法
6764
查看次数

在屏幕键盘显示时调整winrt页面的大小

我有一个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)

在尝试这一点时,我感觉这不是理想的解决方案,但我没有更好的主意.理想情况下,我认为当你需要打开应用程序时,它会像垂直分割一样,但是底部的键盘是水平的,而应用程序只是键盘上方的可用尺寸.

知道这是否可行?

c# keyboard textbox windows-runtime

3
推荐指数
1
解决办法
2806
查看次数