小编Erl*_* D.的帖子

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

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

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

快速举例:

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

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

我可以获得这个位置吗?

c# controls winforms

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

如何在没有管理员权限的进程的管理员权限的情况下启动新进程?

我正在为应用程序创建一个自动更新程序.应用程序由用户启动,无需管理员权限即可运行.autoupdater以管理员权限启动,并在下载新文件之前终止应用程序.

当我想在autoupdater完成后启动更新的应用程序时出现问题.如果我使用常规的System.Diagnostics.Process.Start(文件),应用程序也会以管理员权限启动,并且必须在当前用户上运行才能按预期工作.

那么,我如何使autoupdater以当前用户而不是管理员的身份启动应用程序?

我尝试过使用以下内容:

var pSI = new ProcessStartInfo() { 
    UseShellExecute = false, 
    UserName = Environment.UserName, 
    FileName = file 
};
System.Diagnostics.Process.Start(pSI);
Run Code Online (Sandbox Code Playgroud)

但是这会引发错误"无效的用户名或密码".我已检查用户名是否正确,我知道密码可能无效,因为我没有包含它.但是,要求用户输入他/她的密码不是一个选项,因为自动启动应用程序的全部原因是为了使用户更容易.

有什么建议?

c# windows administrator

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

如何从SQL Server数据库中获取以给定字符串开头的条目?

我有一个数据库,在标签系统中使用了很多单词.我已经为自动完成框创建了必要的代码,但我不确定如何以最有效的方式从数据库中获取匹配的条目.

我知道LIKE命令,但在我看来它更像是一个EQUAL命令.我只得到与我输入的单词完全相同的单词.

我的计划是读取每一行,然后使用C#的string.StartsWith()和string.Contains()函数来查找可能适合的单词,但我认为对于大型数据库,读取每一行可能效率低下然后过滤它们.

有没有办法只读取以SQL Server开头或包含给定字符串的行?

c# sql t-sql sql-server string-comparison

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

运行Windows 8时,SendMessage/SC_MONITORPOWER不会打开监视器

我使用以下代码打开和关闭显示器:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xF170;
private const int MonitorTurnOn = -1;
private const int MonitorShutoff = 2;

//Turn them off
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorShutoff);

//Turn them on
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorTurnOn);
Run Code Online (Sandbox Code Playgroud)

这曾经按预期工作,但在安装Windows 8后(我认为这是原因,因为我看到其他人有同样的问题)打开屏幕将无法正常工作.我仍然可以将其关闭,但无论我使用MonitorTurnOn运行SendMessage()多少次,我仍然需要移动鼠标或按键才能重新启动显示器.

有关如何在Windows 8上运行此工作的任何建议?

c# screen windows-8

12
推荐指数
2
解决办法
8648
查看次数

单击libGDX中的Actor

我的游戏中有一个叠加层,它包含一个屏幕图像和一组"在屏幕上"的按钮.

截图:

显示UI组件的屏幕截图

Screen有一个Stage.该Stage有一套Group对象,我认为它们是层.第一组具有背景,中间的组具有游戏元素,最前面的组具有屏幕覆盖.

叠加层由一个Image屏幕本身和四个TextButton(每个角落一个)组成.

如果不是因为我不能点击游戏层中的任何内容,只要覆盖层中的图像位于其前面,这就行得很好.即使图像是透明的,它仍会在到达游戏层之前拦截所有触摸事件.

所以我的问题是:如何让覆盖层中的图像忽略所有触摸事件,以便游戏层能够获得它们并且实际上可以玩游戏?

我自己尝试了一个想法,但我不确定这是正确的方法: 我尝试创建图像作为自定义Actor,总是将高度/宽度设置为0,但仍然(通过重载draw()方法)在整个屏幕上绘制图像.这非常有效,除了由于某种原因图像被绘制在较低层中的元素后面的事实.

屏幕截图:https://dl.dropboxusercontent.com/u/1545094/Screen2.png

在这个屏幕截图中,我打开了一个指令消息框,它将自己添加到其中一个游戏层(第6组).请注意,覆盖层(即组7)中的所有按钮都位于消息框的前面,但是屏幕框(它是一个自定义Actor)会以某种方式在消息框后面绘制.这是为什么?注意:如果我采用完全相同的情况,并将我的自定义actor更改为常规图像,则所有内容都会正确绘制,但是我不能再单击较低层中的任何内容,如上所述.

这是我的自定义角色,如果有人能够理解它:

public class ClickThroughImage extends Actor {

    BaseDrawable d;

    public NonexistingImage(BaseDrawable d){
        this.d = d;
        setSize(0, 0);
    }

    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        d.draw(batch, 0, 0, 1024, 768); //Yes, I tried swapping these two lines. 
        super.draw(batch, parentAlpha); //It had no effect.
    }
}
Run Code Online (Sandbox Code Playgroud)

java layout libgdx

10
推荐指数
2
解决办法
5516
查看次数

在libGDX中获取表中Actor的Stage坐标

我想创建一个浮动帮助泡泡来介绍我的游戏的基本功能.这个气泡应浮在我希望它解释的Actor之上,如下图所示.

浮动指令泡沫.

为了实现这一点,我想要Actor的坐标,在这种情况下是左按钮,然后我可以将泡泡Actor添加到舞台上的其他所有内容.最后一部分很简单,但我正在努力检索按钮的实际坐标,就像它在表格中一样.

这两个按钮被添加到表中,如下所示:

t.add(btnLab).expandX().center();
t.add(btnSea).expandX().center();
Run Code Online (Sandbox Code Playgroud)

我尝试过最明显的方法:

Vector2 loc = new Vector2(a.getX(), a.getY());
System.out.println("Loc: " + loc);
a.localToStageCoordinates(loc);
System.out.println("Loc: " + loc);
Run Code Online (Sandbox Code Playgroud)

这给了我(按sysout的顺序):[0.0,0.0]和[40.0,130.0].最后一个位置实际上是表格的位置,它填充了屏幕的蓝色区域.因此,这个位置显然错过了Table放置Actor的功能,并且无法使用(因为我最终只得到了Table的位置).

(我也试过在这里使用t.localToStageCoordinates,这是表.结果相同.)

我尝试的另一个解决方案是递归搜索所有父母:

private static Vector2 getLoc(Actor a) {
    return getLoc(new Vector2(a.getX(), a.getY()), a.getParent());
}

private static Vector2 getLoc(Vector2 loc, Actor g) {
    System.out.println("Location: " + loc + ", Actor: " + g);
    loc.x += g.getX();
    loc.y += g.getY();
    if(g.getParent() == null) return loc;
    return getLoc(loc, g.getParent());
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这给了我同样的东西.sysouts提供以下内容:

Location: [0.0:0.0], Actor: Table 40.0,130.0 944.0x508.0
Location: [40.0:130.0], Actor: Group …
Run Code Online (Sandbox Code Playgroud)

java coordinates libgdx

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

是否可以使用WinAPI/C#将单个监视器置于睡眠状态?

通过使用Windows API,可以将监视器置于睡眠模式:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
Run Code Online (Sandbox Code Playgroud)

然后

SendMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2);
Run Code Online (Sandbox Code Playgroud)

运行上面的命令时,两个监视器都会进入休眠状态.是否有可能只影响多个连接的监视器中的一个?

c# monitor sleep-mode

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

使一个组隐藏在其边界之外的Actor

我创建了一个非常简单的绘图,通过在屏幕右侧添加新图像,然后使它们向左侧移动来动态更新.这样,屏幕边界内的绘图看起来就像是随着时间的推移而绘制的.

不幸的是,当这样做时,我必须让图像从屏幕外部开始,然后移动到视图中,在它们完全位于左侧屏幕之外时我无法再将它们移除.这导致图像在屏幕边界之外部分可见.

控件创建为Group包含两个静态图像(黑色背景和屏幕图像作为前景),以及其间的所有运动图像.这Group是然后添加到我的Stage(像所有其他演员),并绘制成的一部分Stage.

在下图中,控件的边界标有红色.我想隐藏这些边界之外的运动图像部分.这是否可以使用我错过的一些libGDX功能?通过某种方式限制集团的绘图区域,也许?

屏幕如何工作的说明.

我的其他选择是在屏幕前绘制部分蓝色背景,隐藏异常值,或使屏幕边缘足够厚以隐藏它们.我认为这两种解决方案都不必要地带来不便,而且我很确定有更好的方法可以做到这一点.

有什么建议?

grouping libgdx

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

在带有子项目(C#)的菜单项上获取单击事件

我正在创建一个上下文菜单,其中应包含所有文件夹,子文件夹和所选文件夹中文件的列表。我希望菜单在单击时打开文件和文件夹,但是如果menuitem具有子项,则单击事件不会注册。

void Foo(string Title)
{
    MenuItem = new MenuItem(Title);
    MenuItem.Click += new EventHandler(MenuItem_Click);
    ContextMenu.MenuItems.Add(MenuItem);
}

void MenuItem_Click(object sender, EventArgs e)
{
    MessageBox.Show("This box will only show when menuitems without subitems are clicked");
}
Run Code Online (Sandbox Code Playgroud)

即使菜单项有子项,如何使点击事件触发?

c# events click menuitem

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

MS Charts:获得真正的InnerPlotPosition?

使用Microsoft Charts创建图表时,我需要在图表上获得网格的确切位置.

这个页面说 - 据我所知 - 这可以用InnerPlotPosition实现.但是,使用此属性时,我得到以下矩形:InnerPlotPosition

这个矩形似乎与图表大小成比例; 在调整图表大小时,矩形会缩小,但仍会在所有边缘上保持在网格外部.我已尝试使用常量添加和乘以大小,但没有一个常量适用于所有大小.

所以,只是为了澄清,我想要的是网格上的外部黑色矩形.有没有办法得到这个?

(我一直在考虑从边缘扫描像素,并检测每个方向上的第一个黑色像素,但这听起来像是一个肮脏的黑客.)

.net c# mschart

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

是否可以在OS X上捆绑Mono运行时(不使用Xamarin)?

我想将Mono运行时与我的OS X应用程序捆绑在一起,这样用户就不需要安装额外的框架来运行我的应用程序了.

当试图使用MonoDevelop的自动打包功能,并检查"在应用程序包中包含Mono运行时"时,我被告知我需要Xamarin.Mac.现在,Xamarin对于像我这样的小公司来说价格相当高,我希望我不必购买整个Xamarin软件包来捆绑运行时.

我的猜测是,还有其他方法可以做到这一点.我特意记得一段时间阅读包含框架和设置环境变量的内容,但我再也找不到了.互联网上有评论和提示,即使在这里也是如此,而且共识似乎确实是可能的,但我还没有找到如何做到这一点的描述.大多数答案似乎链接到mono-project.com网页的部分内容,现在已经不见了,因为它被移植到Xamarin包中,我怀疑.

那么,是否有任何非Xamarin方式在我的应用程序包中包含Mono运行时,让用户在不安装Mono的情况下运行它?

bundle runtime monodevelop monomac xamarin.mac

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

C#从System.Threading.Timer创建表单滴答失败

使用System.Threading.Timer并在计时器的tick事件上初始化Windows窗体时,表单无响应.为什么会这样,我该如何避免呢?

这个简单的示例代码显示了问题; 两个第一个窗口("原始"和"手动")工作正常,但"定时器"立即变得无法响应.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1.Forms
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            this.Text = "Original";
            this.Left = 0;

            Form f = new Form();
            f.Text = "Manual";
            f.Show();
            f.Left = this.Width;

            TimerCallback tCallback = new TimerCallback(Timer_Tick);
            System.Threading.Timer timer = new System.Threading.Timer(tCallback, null, 1000, System.Threading.Timeout.Infinite);
        }

        void Timer_Tick(object o)
        {
            Form …
Run Code Online (Sandbox Code Playgroud)

c# multithreading winforms

2
推荐指数
1
解决办法
3580
查看次数

以编程方式获取打开的Excel/Word文档的路径

有没有办法让目前在Microsoft Word和Microsoft Excel中打开文档的路径?

我知道如何获取运行Excel或Word实例的PID和窗口句柄,但我不知道如何获取打开文档的路径.它甚至可能吗?

我认为API会很好,但我怀疑它是否存在.也许某种插件可以向我的应用程序发送信息?(但如果有其他方法可行,我想避免在任何地方安装插件.)

我更喜欢用C#来做,但任何可以编译成可执行文件的东西都没问题.

如果有人认为这听起来很可疑,那么它就不能被用于任何远程非法行为.它适用于数据收集系统.

c# ms-office

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