小编Don*_*kby的帖子

加载表单而不显示它

简短版本:我想触发Form_Load()事件而不使表单可见.这不起作用,因为Show()忽略Visible属性的当前值:

tasksForm.Visible = false;
tasksForm.Show();
Run Code Online (Sandbox Code Playgroud)

长版本:我有一个WinForms应用程序有两种形式:main和tasks.始终显示主窗体.用户可以单击按钮打开任务表单,也可以单击某些按钮直接运行任务而无需打开任务表单.

当用户要求直接运行任务时,我想在任务表单上调用一些公共方法而不显示它.不幸的是,任务逻辑依赖于Form_Load()事件中发生的事情.我能找到触发Form_Load()的唯一方法是调用Show().我能做的最好的事情是在最小化状态下显示表单:

tasksForm.WindowState = FormWindowState.Minimized;
tasksForm.Show();
Run Code Online (Sandbox Code Playgroud)

我认为最干净的解决方案是将任务逻辑从任务表单中拉出来并转换为控制器类.然后我可以从主窗体和任务窗体中使用该类,并且只在我需要用户可见时才加载任务窗体.但是,如果加载表单而不显示它是一件容易的事情,那将是一个较小的变化.

c# winforms

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

在TabControl中恢复SplitterDistance是不一致的

我正在编写一个WinForms应用程序,我的TabControl中的一个选项卡有一个SplitContainer.我将SplitterDistance保存在用户的应用程序设置中,但恢复不一致.如果带有拆分器的标签页可见,则恢复工作,拆分器距离就像我离开时一样.如果选择了其他选项卡,则分割器距离错误.

.net c# winforms

10
推荐指数
3
解决办法
7246
查看次数

我可以将BeginInvoke与MulticastDelegate一起使用吗?

我想从我的库类中引发一系列事件,但我担心一些事件订阅者会很粗鲁并且需要很长时间来处理一些事件,从而阻止了引发事件的线程.我以为我可以通过使用线程池线程来提升每个事件来保护提升线程:

if (packet != null && DataPacketReceived != null)
{
    var args = new DataPacketEventArgs(packet);
    DataPacketReceived.BeginInvoke(this, args, null, null);
}
Run Code Online (Sandbox Code Playgroud)

当事件只有一个订阅者时,这很好,但是一旦第二个订阅者到达,DataPacketReceived就会成为多播委托,并且我得到一个参数异常,并显示错误消息"委托必须只有一个目标".是否有一种简单的方法可以在单独的线程上引发事件,或者我是否必须启动一个线程然后从那里引发事件?

.net events multithreading delegates begininvoke

10
推荐指数
1
解决办法
4642
查看次数

在Django REST框架的API根目录中包含list_route方法

我正在使用Django REST框架,并且我有一个带有额外列表路由方法的视图集.如何在API根页面中包含该方法的URL?

这是我的视图集的简化版本:

class BookViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    permission_classes = (permissions.IsAuthenticated, )

    @list_route(methods=['get'])
    def featured(self, request):
        queryset = self.filter_queryset(self.get_queryset()).filter(featured=True)

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

我注册了以下的视图集urls.py:

router = DefaultRouter()
router.register('books', BookViewSet)
urlpatterns = patterns(
    url(r'^api/', include(router.urls), name='api_home'),
    #...
    )
Run Code Online (Sandbox Code Playgroud)

URL的books/featured路由是正确的,但是当我去的时候http://localhost:8000/api,我只看到这个:

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS

{
    "books": "http://localhost:8000/api/books/"
}
Run Code Online (Sandbox Code Playgroud)

如何为此类内容添加条目?

"book-featured-list": …
Run Code Online (Sandbox Code Playgroud)

python django rest url-routing

10
推荐指数
1
解决办法
3785
查看次数

使用Puppeteer和无头Chrome获取DOM节点文本

我正在尝试使用无头Chrome和Puppeteer来运行我们的Javascript测试,但我无法从页面中提取结果.基于这个答案,看起来我应该使用page.evaluate().该部分甚至有一个看起来像我需要的例子.

const bodyHandle = await page.$('body');
const html = await page.evaluate(body => body.innerHTML, bodyHandle);
await bodyHandle.dispose();
Run Code Online (Sandbox Code Playgroud)

作为一个完整的示例,我尝试将其转换为一个脚本,该脚本将从Stack Overflow上的用户配置文件中提取我的名字.我们的项目使用的是Node 6,因此我将await表达式转换为使用.then().

const puppeteer = require('puppeteer');

puppeteer.launch().then(function(browser) {
    browser.newPage().then(function(page) {
        page.goto('https://stackoverflow.com/users/4794').then(function() {
            page.$('h2.user-card-name').then(function(heading_handle) {
                page.evaluate(function(heading) {
                    return heading.innerText;
                }, heading_handle).then(function(result) {
                    console.info(result);
                    browser.close();
                }, function(error) {
                    console.error(error);
                    browser.close();
                });
            });
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到此错误:

$ node get_user.js 
TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at args.map.x (/mnt/data/don/git/Kive/node_modules/puppeteer/node6/helper.js:30:43)
    at Array.map (native)
    at Function.evaluationString (/mnt/data/don/git/Kive/node_modules/puppeteer/node6/helper.js:30:29) …
Run Code Online (Sandbox Code Playgroud)

node.js google-chrome-headless puppeteer

10
推荐指数
1
解决办法
1万
查看次数

导航到 VS Code 中的 Ruby 函数定义

我对 Visual Studio Code 很陌生,我正在尝试编辑一些 Ruby 代码。我安装了Ruby support,并启用了语言服务器,但是Ctrl单击函数名称不起作用,F12. 这两个功能都适用于 Python 代码。

如何从函数调用导航到 Ruby 代码中的定义?

这是我尝试过的 Ruby 代码:

def foo
    puts "In foo."
end

foo()
Run Code Online (Sandbox Code Playgroud)

这是我的设置:

{
    "explorer.confirmDelete": false,
    "explorer.confirmDragAndDrop": false,
    "terminal.integrated.fontSize": 15,
    "git.confirmSync": false,
    "ruby.useLanguageServer": true,
    "editor.rulers": [80, 120]
}
Run Code Online (Sandbox Code Playgroud)

这是运行良好的 Python 代码:

def foo():
    print('In foo.')


foo()
Run Code Online (Sandbox Code Playgroud)

ruby visual-studio-code

10
推荐指数
3
解决办法
6207
查看次数

关于传递许多参数

我有大约8-9个参数传入一个返回数组的函数.我想知道直接在函数中传递这些参数或传递数组更好吗?这将是一个更好的方式,为什么?

.net c# asp.net .net-2.0

9
推荐指数
2
解决办法
3196
查看次数

我可以使DataGridView.EndEdit触发CellValidating事件吗?

我在WinForms应用程序中使用DataGridView.我的主要目标是使Enter键不移动到网格中的下一行.我仍然希望输入键验证并结束编辑模式.

我发现这个FAQ条目和子类DataGridView重写ProcessDialogKey().如果按下的键是Enter,我调用EndEdit(),否则我调用base.ProcessDialogKey().

它工作得很好,除了没有触发CellValidating事件.

目前,我只是在调用EndEdit之前手动调用我的验证逻辑,但似乎我错过了一些东西.

我想我可以打电话给OnCellValidating,但后来我担心我错过了其他一些事件.我真正想要的是一些EndEdit()的行为,就像在添加禁用的网格的最后一行按Enter一样.

c# datagridview winforms

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

通过补丁或合并提案在启动板上提交错误修复?

我是LaunchpadBazaar的新手,我正在试图找出提交错误修复的最佳方法.我正在使用一些在Launchpad上托管的相当流行的开源软件,但它不是很稳定.我已经创建了自己的项目分支来稳定它并仅应用我们需要的错误修复,而无需添加正在进行的开发中的其他更改.

当我提交错误然后弄清楚如何自己解决它们时,我将修复程序推送到我们的稳定分支.我该如何将修复程序发布回主项目?我可以创建一个补丁文件并将其附加到bug,或者我可以为我们的稳定分支建议合并.

如果我修复了多个错误,我可以为每个错误制定单独的合并提案,还是累积?

open-source patch bazaar

9
推荐指数
1
解决办法
1812
查看次数

如何托管Google小工具?它是如何工作的?

我只花了5个小时查看Google小工具网站和常见问题解答,但我仍然不知道如何托管小工具.

我从阅读Google文档中得到的结论:

  1. 我可以用XML,JavaScript等编写小工具.
  2. 小工具可以添加到iGoogle等.
  3. Google可以为您托管小工具.
  4. 小工具可以在任何其他地方托管???

以上所有信息均未回答我的问题.例如,使用jQuery或Dojo Toolkit,我可以下载JavaScript框架并使用它.使用Google小工具,我找不到框架的下载链接.为什么?谷歌是否提供其框架?如果没有,为什么文档表明小工具可以托管在任何地方?我完全糊涂了.

非常欢迎简要说明或一些有用的链接!非常感谢!!!

ajax google-gadget

9
推荐指数
2
解决办法
4757
查看次数