标签: winforms

如何在我的C#程序面板中运行另一个应用程序?

我一直在阅读很多关于如何从C#程序(Process.Start())中触发应用程序的内容,但是我还没有找到有关如何在我的C#程序面板中运行这个新应用程序的任何信息.例如,我想点击一下按钮,在我的应用程序中打开notepad.exe,而不是外部打开.

.net c# windows exe winforms

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

无法使用System.Windows.Forms

我试过制作(我的第一个)C#程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这很顺利,但如果我尝试使用System.Windows.Forms:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            System.MessageBox("hello");
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Error   1   The type or namespace name 'Windows' does not exist in the namespace     'System' (are you missing an assembly reference?)  C:\Users\Ramy\Documents\Visual Studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs  5   14 …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio winforms

68
推荐指数
6
解决办法
18万
查看次数

向上,向下,向左和向右箭头键不会触发KeyDown事件

我正在构建一个应用程序,其中所有键输入必须由Windows本身处理.

我为每个控件设置了tabstop为false,除了一个面板之外,女巫可以抓住焦点(但我不知道它是否有效).

我将KeyPreview设置为true,我正在处理此窗体上的KeyDown事件.

我的问题是,有时箭头键不再响应:

  • 当我只按箭头键时,不会触发keydown事件.

  • 如果我按下带有控件修饰符的箭头键,则会触发keydown事件.

你知道我的箭头键突然停止发射事件的原因吗?

c# keydown winforms

67
推荐指数
4
解决办法
14万
查看次数

从文件打开图像,然后释放锁定?

我正在使用以下代码行Image从文件中打开:

pictureBox1.Image = Image.FromFile("test.png");
Run Code Online (Sandbox Code Playgroud)

我希望它能锁定文件,将图像加载到内存中,设置pictureBox1.Image为内存中的副本,然后释放锁定.在现实中,锁不会消失,直到我Dispose()Image记忆.我无法释放我不再使用的硬盘上的文件锁,直到我删除了我正在使用的内存中的文件. 微软的网站在一篇带有C#标签的文章中提及它,但他们的解决方案是用visual basic编写的,这对我来说毫无用处.

总结:我想设置pictureBox1.Image存储的图像"test.png",然后让用户编辑或删除"test.png"或其他.

c# locking image winforms

67
推荐指数
3
解决办法
5万
查看次数

如何让DataGridView显示所选行?

我需要强制DataGridView显示所选row.

简而言之,我有一个根据键入的内容textbox更改DGV选择textbox.发生这种情况时,选择会更改为匹配row.

不幸的是,如果所选row内容不在视图中,我必须手动向下滚动才能找到所选内容.有谁知道如何强制DGV显示所选row

谢谢!

c# scroll datagridview selected winforms

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

在向其写入新数据时,"富文本"框会滚动到底部

我的程序调用Java,然后将stdout重定向到a RichTextBox.我的问题是,每次写入数据时,垂直滚动条始终位于框的顶部.

即使您滚动到底部,一旦写入新数据,它就会转到顶部.我想反其道而行之.

因此,当写入新数据时,它会保持在底部.我怎样才能做到这一点?

c# richtextbox winforms

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

如何在Form的Closing事件中停止BackgroundWorker?

我有一个生成BackgroundWorker的表单,它应该更新表单自己的文本框(在主线程上),因此Invoke((Action) (...));调用.
如果HandleClosingEvent我只是做bgWorker.CancelAsync()然后我得到ObjectDisposedExceptionInvoke(...)电话,可以理解.但是,如果我坐在那里HandleClosingEvent等待bgWorker完成,那么.Invoke(...)永远不会返回,也是可以理解的.

任何想法如何关闭此应用程序而不会出现异常或死锁?

以下是简单Form1类的3个相关方法:

    public Form1() {
        InitializeComponent();
        Closing += HandleClosingEvent;
        this.bgWorker.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
        while (!this.bgWorker.CancellationPending) {
            Invoke((Action) (() => { this.textBox1.Text = Environment.TickCount.ToString(); }));
        }
    }

    private void HandleClosingEvent(object sender, CancelEventArgs e) {
        this.bgWorker.CancelAsync();
        /////// while (this.bgWorker.CancellationPending) {} // deadlock
    }
Run Code Online (Sandbox Code Playgroud)

c# multithreading backgroundworker winforms

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

如何在用户单击列标题时启用DataGridView排序?

我的表单上有一个datagridview,我填充它:

dataGridView1.DataSource = students.Select(s => new { ID = s.StudentId, RUDE = s.RUDE, Nombre = s.Name, Apellidos = s.LastNameFather + " " + s.LastNameMother, Nacido = s.DateOfBirth })
                                   .OrderBy(s => s.Apellidos)
                                   .ToList();
Run Code Online (Sandbox Code Playgroud)

现在,我使用s.Apellidos作为默认排序,但我也想允许用户在单击列标题时进行排序.

这种排序不会以任何方式修改数据,它只是一个客户端奖励,以便在用眼睛扫描屏幕时更容易搜索信息.

谢谢你的建议.

c# sorting datagridview winforms

66
推荐指数
6
解决办法
14万
查看次数

在WinForms应用程序中找到集中控件的首选方法是什么?

找到当前在WinForms中接收用户(键盘)输入的控件的首选/最简单方法是什么?

到目前为止,我已经提出以下建议:

public static Control FindFocusedControl(Control control)
{
    var container = control as ContainerControl;
    return (null != container
        ? FindFocusedControl(container.ActiveControl)
        : control);
}
Run Code Online (Sandbox Code Playgroud)

从表单中,可以简单地称为(在.NET 3.5+中甚至可以将其定义为表单上的扩展方法) -

var focused = FindFocusedControl(this);
Run Code Online (Sandbox Code Playgroud)

这个合适吗?

是否有我应该使用的内置方法?

请注意,使用层次结构时,单次调用ActiveControl是不够的.想像:

Form
    TableLayoutPanel
        FlowLayoutPanel
            TextBox (focused)
Run Code Online (Sandbox Code Playgroud)

(formInstance).ActiveControl将返回对TableLayoutPanel的引用,而不是TextBox(因为ActiveControl似乎只是在控制树中返回直接活动的子节点,而我正在寻找叶子控件).

.net winforms

65
推荐指数
4
解决办法
5万
查看次数

C#获取控件在表单上的位置

当控件可能在其他控件(如Panel)中时,有没有办法检索控件在窗体中的位置?

控件的Left和Top属性只给出了它在父控件中的位置,但如果我的控件位于五个嵌套面板中,我需要它在窗体上的位置怎么办?

快速举例:

按钮btnA位于面板pnlB内的坐标(10,10)上.
面板pnlB位于形式frmC内的坐标(15,15)上.

我想要btnA在frmC上的位置,这是(25,25).

我可以获得这个位置吗?

c# controls winforms

65
推荐指数
5
解决办法
11万
查看次数