我想添加用户捕获我的应用程序中的当前屏幕并通过电子邮件发送它的能力.我有一个非技术性的用户群,所以我需要尽可能简单.我打算让他们点击一个名为Help Me的菜单项!然后它将捕获当前的应用程序屏幕,希望作为jpg或png,然后打开Outlook并将图像添加为附件.
我正在阅读这篇关于Code Project 的ScreenCapture帖子,但它有点老了,并不是我想要的所以我想我会检查是否有更好的方法来做到这一点.
我该如何开始这个?是否有图书馆或内置功能足够?
谢谢!
好吧,我有一个大型CRUD应用程序,使用带有嵌入在其中的表单的选项卡,如此 - >
public static void ShowFormInContainerControl(Control ctl, Form frm)
{
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.Visible = true;
ctl.Controls.Add(frm);
}
Run Code Online (Sandbox Code Playgroud)
然后我在父表单的表单加载事件中调用以下 - >
// Embedd the child form in the this Parent
WinFormCustomHandling.ShowFormInContainerControl(pnlModuleHost, _frmWWCModuleHost);
Run Code Online (Sandbox Code Playgroud)
这是我在这里回答我之前提出的问题.
随着我的进步,我不断得到这样一种感觉,即多层嵌入式表格是等待发生的灾难,用户控件不断弹出.有人能为我提供一些关于使用用户控件和嵌入表单的具体建议吗?
请参阅我之前的问题,了解这个问题的灵感.这里
此外,还可以在此处找到我当前嵌入的表单布局在行动中的屏幕截图.
谢谢
我在这里看到这个问题,但我不确定是否回答了我的问题.我的中央SQL服务器是2005 Standard.我正在开发一个需要在本地安装SQL Express的应用程序.然后我以编程方式创建订阅,然后同步它们.
我可以在本地机器上使用2008 Express吗?
我偶然发现了下面这段代码,并试图在我的WinForm应用程序中实现它,以帮助我的用户,因为许多人非常缺乏技术.
不幸的是,它什么也没做.它不会产生任何错误或任何错误.它只是没有使它成为Flash.
有人可以提供任何见解吗?我在Win 7(x64)和Win XP(x86)上尝试过,两者的结果相同.
我这样称呼它 - > TaskbarFlasher.FlashWindow(this);从我的主表格.
[DllImport("user32.dll")]
private extern static bool FlashWindow(IntPtr hwnd, bool bInvert);
[DllImport("user32.dll")]
private extern static IntPtr GetForegroundWindow();
/// <summary>
/// Notifies the user that the application requests attention
/// by flashing the taskbar if the form is not the current window.
/// </summary>
/// <param name="myForm">The form in question.</param>
public static void FlashWindow(Form myForm)
{
// if the current foreground window isn't this window,
// flash this window in task bar once …Run Code Online (Sandbox Code Playgroud) 当用户单击我的验证按钮(在我的C#,WinForm,.net 3.5应用程序中)时,如果它是空的,我想在某个控件周围绘制一个边框.说一个名为tbxLastName的文本框我以为我需要做这样的事情 - >
ControlPaint.DrawBorder(Graphics.FromHwnd(this.Handle),
tbxLastName.ClientRectangle, Color.Firebrick, ButtonBorderStyle.Solid);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道要为图形对象放什么,因为我没有做什么.
我遇到的所有示例,MSDN - HERE,都在Paint事件中包含此代码.像这样 - >
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle,
Color.DarkBlue, ButtonBorderStyle.Solid);
}
Run Code Online (Sandbox Code Playgroud)
但是,我只希望在某些条件满足时出现边框,这是由Button_Click启动的
许多建议建议使用容器对象来保存文本框并将其命名为Paint_Event.我做了这个,出现了一个方框但不在控件周围.它出现在Container Control的左上角.这是我在做什么 - >
private void grpImmunizationCntrl_Paint(object sender, PaintEventArgs e)
{
if (lkuNOImmunizationReason.Text.Equals(string.Empty)
{
ControlPaint.DrawBorder(
e.Graphics, lkuNOImmunizationReason.ClientRectangle,
Color.Firebrick, ButtonBorderStyle.Solid);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
这就是我提出的将这些建议与对我有用的建议相结合的方法.
public static void HighlightRequiredFields(Control container, Graphics graphics, Boolean isVisible)
{
Rectangle rect = default(Rectangle);
foreach (Control control in container.Controls)
{
if (control.Tag is string && control.Tag.ToString() …Run Code Online (Sandbox Code Playgroud) 我有下面的代码,可以在 WinForm 3.5 应用程序中的控件周围绘制边框。
我不知道如何加粗正在绘制的边框。我尝试Inflate(5,5)过,ClientRectangle但这实际上使边框完全消失而不是使其变厚。
我的印象是,我实际上需要合作才能e.Graphics实现这一目标,但我一生都无法弄清楚如何实现。
有想法吗?
ControlPaint.DrawBorder(
e.Graphics, datImmunizationRecieved.ClientRectangle, Color.OrangeRed, ButtonBorderStyle.Solid);
Run Code Online (Sandbox Code Playgroud)
下面是我如何实现相同的方法但重载(注意:这些都在 Paint_Event 内)
var borderColor = Color.FromArgb(173, 216, 230);
var borderStyle = ButtonBorderStyle.Solid;
var borderWidth = 3;
ControlPaint.DrawBorder(
e.Graphics,
lkuNOImmunizationReason.ClientRectangle,
borderColor,
borderWidth,
borderStyle,
borderColor,
borderWidth,
borderStyle,
borderColor,
borderWidth,
borderStyle,
borderColor,
borderWidth,
borderStyle);
Run Code Online (Sandbox Code Playgroud) 我们有一个内部应用程序(胖客户端),它依赖于我们的中央SQL服务器.该应用程序是一个桌面应用程序,允许用户在"离线"模式下工作(例如Outlook).我需要做的是一种准确判断SQL是否可用的方法.
我目前使用以下方法 - >
internal static void CheckSQLAvailability()
{
using (TcpClient tcpc = new TcpClient())
{
try
{
tcpc.Connect(Settings.Default.LiveSQLServer, Settings.Default.LiveSQLServerPort);
IsSQLAvailable = true;
}
catch
{
IsSQLAvailable = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于以下原因,我并不为这种方法而疯狂.
我曾经想过要使用一个计时器,每隔X(3 ??)分钟调用一次,如果是否定结果,再次尝试减少误报.
这里有一个类似的问题 - > 检测SQL服务器是否正在运行, 但它在这些方面与我的不同:
那么到底有没有更优雅的方式呢?这都将是"网内"检测.
PS在下面的答案中提供一些背景:我的应用程序是一个基本的CRUD应用程序,可以连接到我们的中央SQL Server或本地SQLExpress服务器.我有一个合并复制模块,使它们保持同步,并且DAL绑定到一个User.Setting值.我已经可以手动将它们从中央翻转到本地并返回.我只是想实现一种让它自动执行此操作的方法.我有一个NetworkChangeDetection工作得很好的类,但很明显,它没有检测到远程SQL.
我有一个 Winform 应用程序,当前有 16 个 SQL 连接存储在 DAL Projects 中Settings.settings。
我正在尝试编写一个“Manager”类来简化此操作(如下 所示)。然而,我在网上找到的大多数示例似乎都使用ConfigurationSettings.AppSettings["something"]. 同时,我正在使用Properties.Settings.Default.something.
有人可以解释一下哪个被认为是正确的以及为什么对于桌面应用程序来说是正确的吗?
我已经在这里阅读了很多问题,甚至发布了我自己的一个试图深入研究这个问题(我以前的问题).不幸的是,他们都没有回答我的问题..Settings每当我通过ClickOnce部署更新时,我的文件都会重置.我认为ClickOnce应该为我处理这类事情,但由于它似乎没有,我实现了如下所示.Upgrade()的设置标志:
if (Settings.Default.MustUpgradeSettings)
{
Settings.Default.Upgrade();
Settings.Default.MustUpgradeSettings = false;
Settings.Default.Save();
}
Run Code Online (Sandbox Code Playgroud)
我检查一下OnLoad().我错过了什么吗?这让我疯狂!
我也在MSDN,这里发布了这个,到目前为止他们的帮助甚至更少.我只是知道,当这一切都结束时,我最终将"鸡蛋和我的脸对齐"我只是希望有人可以为我指出这一点......
我有一个通过ClickOnce部署的Winforms应用程序,该应用程序具有SQL Server 2005 Express的先决条件.我想将其更改为SQL Server 2008 R2 Express.
我正在查看package.xmlSQL Server 2008 R2 Express并注意到这些行:
<!-- Defines an upgrade installation (x86) -->
-<Command Arguments="/q /hideconsole /action=Upgrade /instancename=SQLEXPRESS
/IAcceptSqlServerLicenseTerms /skiprules=RebootRequiredCheck"
PackageFile="SQLEXPR32_x86_ENU.EXE"
EstimatedInstallSeconds="420" EstimatedInstalledBytes="225000000">
Run Code Online (Sandbox Code Playgroud)
这个SEEMS意味着升级是可能的.但是,在尝试此操作时,它失败,并提示我卸载现有SQLEXPRESS实例.
有谁知道这是否可能?也许,我做错了什么?我是否只需要额外的'英里'并编写现有SQL实例的卸载代码?有没有人曾经处理类似的事情?
PS这是否属于数据库管理员(https://dba.stackexchange.com/)?鉴于我的问题的ClickOnce上下文,我不确定.
.net ×7
c# ×7
winforms ×6
.net-3.5 ×4
sql-server ×3
clickonce ×2
controls ×2
settings ×2
dllimport ×1
interop ×1
replication ×1
screenshot ×1
sql ×1
taskbar ×1