小编edu*_*nio的帖子

监听整个 Blazor 页面中的键盘输入

我正在尝试实现一个始终监听键盘输入的 Blazor 应用程序(比如说某种全屏游戏)。

我可以将按键事件侦听器视为其可能的实现,因为实际上并没有可以自动聚焦的输入字段。

是否有更好的解决方案来对屏幕任何部分的按键做出反应?

如果这是所选的一个,如何从客户端 Blazor 应用添加事件侦听器?我尝试通过这样的脚本来做到这一点失败了:

编辑:我对下面的代码进行了一些修改,以使其在修复我所询问的原始关键错误后真正起作用。

scripts/event-listener.js

window.JsFunctions = {
    addKeyboardListenerEvent: function (foo) {
        let serializeEvent = function (e) {
            if (e) {
                return {
                    key: e.key,
                    code: e.keyCode.toString(),
                    location: e.location,
                    repeat: e.repeat,
                    ctrlKey: e.ctrlKey,
                    shiftKey: e.shiftKey,
                    altKey: e.altKey,
                    metaKey: e.metaKey,
                    type: e.type
                };
            }
        };

        // window.document.addEventListener('onkeydown', function (e) { // Original error
        window.document.addEventListener('keydown', function (e) {
            DotNet.invokeMethodAsync('Numble', 'JsKeyDown', serializeEvent(e))
        });
    }
};

Run Code Online (Sandbox Code Playgroud)

index.html

<head>
    <!--  -->
    <script src="scripts/event-listener.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

通过以下方式调用它:

protected async override Task OnAfterRenderAsync(bool …
Run Code Online (Sandbox Code Playgroud)

event-handling dom-events blazor blazor-webassembly

8
推荐指数
1
解决办法
3480
查看次数

保持两个bool类成员具有相反的值

我打算有两个bool类成员(m_alive&m_dead),这样他们的值总是相反的.这可能看起来很愚蠢(事实上,它可能只是愚蠢的),但正如您在下面的代码中所看到的,但我真正想要的是根据具体情况更清楚地检查对象状态,并且没有必要输入!m_alive或者是有用的!m_dead.所以,是的,我真的不需要两个成员,但我想不出更简单的方法.

我想到的第一个想法就是创建一个函数来改变其中一个的状态,如果另一个也改变了,但我很确定需要一个更简单,更容易和更快速的方法来保持每一个这是正确的价值.

AFAIK,它不可能用它来做,define因为它会有尽可能多的不同对象,我打算创建并且看起来不实用.

#define object1.m_death= !object1.m_alive;
#define object2.m_death= !object2.m_alive;
// ...
Run Code Online (Sandbox Code Playgroud)

所以在这里你有两个成员的主要想法:

class myclass
{
    public:
    // (...)
    private:
        bool m_alive;
        bool m_death;   // Always !m_alive
};

int main()
{
    myclass myobject;
    // (...)
    if (myobject.m_dead)
    //...
    if (myobject.m_alive)   // clearer than !myobject.m_dead()
    // ...
}
Run Code Online (Sandbox Code Playgroud)

任何有关如何保持更新的建议都是受欢迎的,以及实现我的想法的任何其他方式.提前致谢!

爱德华多

PD:在重新阅读我的问题时,我想到了枚举类型.

它将强制检查dead_or_alive枚举类成员的myobject.m_status==dead或者myobject.m_status==alive,是deadalive可能的值dead_or_alive m_status.

尽管语法有点长,但这对我正在寻求的方式是否更好?


最终编辑:

感谢所有评论和回答的人.这是我最终采用的解决方案:

enum Piece_status:bool{     dead= false,    alive= …
Run Code Online (Sandbox Code Playgroud)

c++ class c++11

4
推荐指数
2
解决办法
301
查看次数

专用Docker注册表:“ x509:由未知授权机构签名的证书”仅适用于Windows映像

尝试从私有Docker注册表中提取Windows映像时,出现以下错误

x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)

我已经安装了正确的证书,并且可以毫无问题地提取Linux映像,但是由于某些原因,我无法提取Windows映像。

我的同事没有这个问题。

关于这个有什么想法吗?

docker

4
推荐指数
2
解决办法
2699
查看次数

Docker 文件当前工作 &gt; 目录不包含项目或解决方案文件

发出命令时:docker build -t honda-api:build .

步骤 7/10:运行 dotnet Restore ---> 在 beedd0465f48 MSBUILD 中运行:错误 MSB1003:指定项目或解决方案文件。当前工作目录不包含项目或解决方案文件。

文件夹结构如下所示

        Domain/
            Honda.Domain/
                Honda.Domain.csproj
        API/
            Honda.API/
                Honda.API.csproj
        Dockerfile
Run Code Online (Sandbox Code Playgroud)

Docker 文件内容

    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 
    WORKDIR /home/app 
    COPY . . 
    COPY ./Domain/Honda.Domain/Honda.Domain.csproj Domain/
    COPY ./API/Honda.API/Honda.API.csproj API/
    
    RUN dotnet restore 
    RUN dotnet publish ./Honda.API.csproj -o /publish/ 
    WORKDIR /publish ENV ASPNETCORE_URLS=https://+:5001;http://+:5000 
    ENTRYPOINT ["dotnet", "Honda.API.dll"]
Run Code Online (Sandbox Code Playgroud)

.net docker .net-core

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