我将继续在我的简单图形程序(使用C#)中编程某种键盘导航.我又一次陷入困境.

我的问题是我想处理键盘输入以移动图层.使用鼠标移动图层已经很好地工作了,但控件没有得到焦点(此控件都没有触发KeyUp/KeyDown/KeyPress和GotFocus/LostFocus).由于我的类派生自Panel(并覆盖了几个事件),我也覆盖了上面提到的事件,但是我无法成功触发这些事件.
我想我可以设法使用Keyboard.GetState()或ProcessCmdWnd之类的东西来实现键盘响应.但是:我仍然必须知道控件何时得到关注.
是否有一种或多或少的优雅方式将此功能添加到用户控件(基于Panel)?
我在这里检查了很多线程,我可能会使用这种方法进行键盘输入.然而,焦点问题仍然存在.
非常感谢您提前获取信息!
伊戈尔.
ps:我使用VS2008在C#.NET v3.5中编程.它是Windows.Forms应用程序,而不是WPF.
我有一个带有用户名和密码的SQL表.密码使用MessageDigest的digest()方法进行编码.如果我编码一个密码 - 让我们说"abcdef12" - 使用MessageDigest的digest()方法,然后将其转换为十六进制值,则String与使用PHP的SHA1方法执行相同操作时不同.我希望这些值完全相同.
用于对密码进行编码的代码:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passbyte;
passbyte = "abcdef12".getBytes("UTF-8");
passbyte = md.digest(passbyte);
Run Code Online (Sandbox Code Playgroud)
使用此方法将String转换为十六进制:
public static String convertStringToHex(String str) {
char[] chars = str.toCharArray();
StringBuffer hex = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
hex.append(Integer.toHexString((int) chars[i]));
}
return hex.toString();
}
Run Code Online (Sandbox Code Playgroud)
密码:abcdef12
这是许多SHA1-hash在线生成器和PHP SHA1()返回的密码 - 功能:d253e3bd69ce1e7ce6074345fd5faa1a3c2e89ef
这是MessageDigest编码的密码:d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef
我忘记了什么吗?
伊戈尔.
编辑:我发现有类似问题的人:C#SHA-1与PHP SHA-1 ...不同的结果?.解决方案是更改编码..但我无法更改服务器端的编码,因为该SQL表中的密码不是由我的应用程序创建的.我使用JavaScript SHA1类(更确切地说是一个Google Web Toolkit类)使用客户端SHA1编码.它按预期工作和编码字符串,但显然使用ASCII字符?..
我有一个设计问题,不确定如何解决。
假设我的主要应用程序包含6个模块:
客户端应该只与网关服务通信。
我是否应该让网关进行用户身份验证(理想情况下会导致JWT)和其他3种生产服务(论坛,画廊,消息)仅验证令牌并检索给定用户自己管理的权限和角色?
如果愿意,请单击此处获取原始的draw.io图形。
我不想使用任何第三方身份验证服务;我只希望我的身份验证服务(已完成)注册用户并让他们登录。还是应该在该服务中管理权限和角色?
我花了几个月的时间来解决这个问题,但是我根本找不到合适的结构,因此我可以让用户注册,登录/注销并与各种生产性服务进行通信。我目前正在使用Java作为后端工具,但是关于微服务的好处是,我不必全部使用一种编程语言。
欢迎任何帮助!
附:我阅读了微服务认证策略和Zuul-Api网关认证,但是这两种方法似乎都不适用。
我已阅读如何防止角料素材菜单关闭?,它解释了如何防止Angular材质mat-menu关闭点击.
但是:当我按Tabater更改焦点时,我似乎找不到阻止mat菜单关闭的方法.
以StackBlitz为例:https://stackblitz.com/edit/angular-ij6jbx:当输入字段通过鼠标点击获得焦点时,它可以正确阻止mat-menu关闭.另一方面:如果按"制表符"更改焦点并且-input-field接收焦点,则菜单关闭.username
我想知道如何防止这种行为 - 如果可能的话.我试图连接$event.stopPropagation();到(input),但它似乎并没有做任何事情.
显然,Angular开发人员根据https://github.com/angular/material2/issues/2612给出了一些想法.遗憾的是,在问题/功能请求结束时似乎没有适当的解决方案,也没有关于状态的提示.
Ps:我知道,目前的代码不漂亮也不聪明.一旦它同时适用于点击和按键,我就会将其重构为自己的指令.
我有几个 Maven 项目:
虽然commons-lib不太可能单独发布,但所有其他项目(父项目除外)可能会单独发布。
如果列表中的前四个是第五个的子模块,作为回报,它们是否必须将其父模块设置为父模块(例如 all-services-parent)?
因为我想在用户和复合服务中包含commons-lib,所以我知道我必须先构建它。但是:上述每项服务都可能单独发布 - 那么哪种建筑结构最适合我的需要?
可不可能是:
-- all-services-parent
|-- (maven sub-module) commons-lib
|-- (maven sub-module) user-service
|-- (maven sub-module) composite-service
|-- (maven sub-module) frontend-service
Run Code Online (Sandbox Code Playgroud)
或者:
-- all-services-parent
|-- user-service-parent
|-- (maven sub-module) commons-lib
|-- (maven sub-module) user-service
|-- composite-service-parent
|-- (maven sub-module) commons-lib
|-- (maven sub-module) composite-service
|-- frontend-service
Run Code Online (Sandbox Code Playgroud)
第二个构建结构将允许我通过在所有服务父级上调用“mvn …
我目前正在尝试自动递增版本,追加SNAPSHOT到它并提交到使用 GitLab 12.9.2 和 GitLab-Shell 12.0.0 创建的给定标签的分支。
我知道,标签(尤其是发布标签)应该是从 master 创建的,但由于我可能会得到一个开发分支或其他分支,我想在其上标记提交,所以我想保留标记的能力给定的提交、构建、部署相应的工件(到 Nexus)、自动递增版本(例如从0.1.3到0.1.4-SNAPSHOT)并将其提交到创建标签的分支。
虽然所有其他步骤都有效,但我在最后一个步骤失败了,因为我找不到正确的环境变量,它引用了创建标签的提交(和分支)。
以下是 CI 文件的摘录:
build-release:
extends: .build-template
only:
- tags
before_script:
# Setup git
- git config http.sslVerify false
- git config user.email "git-bot@base/gitlab"
- git config user.name "$GIT_CI_USER"
- git remote set-url origin https://$GIT_CI_USER:$GIT_CI_PASSWORD@base/gitlab/development/particles/particles-front.git
- git fetch
# - git config http.sslCAInfo /etc/gitlab-runner/certs/base.crt ?
# - git config http.sslCert /etc/gitlab-runner/certs/base.crt ?
- cd $CI_BUILDS_DIR/$SUB_PATH
# Install node_modules
- npm install …Run Code Online (Sandbox Code Playgroud) 我已经搜索了web和stackoverflow.
我想将多个文件中的多个文件复制到多个目的地.我还没有使用UnauthorizedAccessExceptions - 这些文件最有可能无法使用.
我可以从这里使用CopyFileEx-Wrapper复制1个文件.但是:我想要出现标准的Windows复制文件对话框.我想复制多个文件 - 而不仅仅是一个 - 例如传递一组源文件和一组目标文件.
有没有办法做到这一点?更多:有没有办法将此作为一个任务排队而不是x分离的复制操作?这样做的原因是我只想显示一个进度对话框 - 从复制所有文件的开始到结束.
我希望我的问题很明确.
非常感谢大家.
divStar.
我正在使用List构造来处理在"OnPaint"中绘制图像的序列.现在,如果我的图像被重新排序(例如"带到前面"或"......后面"),我需要在我的列表中重新定位它们.我这样做很麻烦,因为List不支持类似于setIndex()的方法.
所以我想要做的基本上是:
private List<BitmapWithProps> activeImages = new List<BitmapWithProps>();
public void addActiveImage(BitmapWithProps image)
{
activeImages.Add(image);
}
public BitmapWithProps getActiveImage(int index)
{
return activeImages[index];
}
public void removeActiveImage(int index)
{
activeImages.RemoveAt(index);
}
public void removeActiveImage(BitmapWithProps item)
{
activeImages.Remove(item);
}
public void swapActiveImageIndex(int sourceIndex, int destIndex)
{
// what would the code look like in here if I were to swap
// the 2nd item (1) with the 4th one (3) in a 5-item-List (0 - 4)
}
Run Code Online (Sandbox Code Playgroud)
我希望能够交换一个索引..那种.我可以在它应该去的索引处"插入"一个新项目并分配值,然后删除另一个"源".然而,它似乎并不优雅. …
我有一个电子表格来跟踪数据,每个有链接的用户都可以编辑.虽然我明白这是一个安全隐患,但我不介意,因为电子表格只是我所知道的并且对我所在的公会感兴趣.
更多特定区域受到保护,只有文档管理员才能访问它.
我想做的是,让GAS对所有(匿名)用户的"onEdit"做出回应.
最简单的例子是这样的:
Code.gs
function onEdit(e) { Browser.msgBox('Editing...'); }
Run Code Online (Sandbox Code Playgroud)
我将它附加到表 - >编辑触发器,它确实为我显示 - 因为我登录OR,因为我是这个文档的管理员.但是:其他(匿名)用户由于某种原因没有收到消息框.我已经阅读了权限表并且说明了,如果你想要使用任何类型的脚本(除了那些时间驱动的脚本,以一个脚本的名义执行,添加它们),显然你必须登录).
没有解决方法吗?我的触发器只是将值从一个表复制到另一个表,排序和格式化它们.
非常感谢你提前!