如何用c#的windows8.1输入法窗口输入英文

VS自带的打包
我打包2个文件夹,2个文件夹里面有一个名称一样的文件,打包的时候好像会打同一个进去,不知道有没有人碰到过,怎么解决不知道我是否表述清楚
本文地址 :CodeGo.net/886914/
-------------------------------------------------------------------------------------------------------------------------
1.相同名字的文件放在不同目录应该可以吧,楼主可以用CEManager3.0的打包工具试一下,或是InstallShield
不能有相同名字的文件,即使目录不同
本文标题 :VS自带的打包
本文地址 :CodeGo.net/886914/
Copyright (C) 2014 CodeGo.net 沪ICP备号 联&系& c&o&d&e&g&o &@&1&2&6&.&c&o&m> 在C#的windows窗体中,怎么让窗体位于指定的位置(如最右侧)
在C#的windows窗体中,怎么让窗体位于指定的位置(如最右侧)
hongyy & &
发布时间: & &
浏览:50 & &
回复:4 & &
悬赏:0.0希赛币
在C#的windows窗体中,如何让窗体位于指定的位置(如最右侧)在C#的windows窗体中,如何让窗体位于指定的位置(如QQ的界面一样,在最右侧)?
把窗体的StartPosition设为Manual 在构造函数里加上
this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width- this.Size.Width, Screen.PrimaryScreen.WorkingArea.Height - this.Size.Height);
hongzhilang & &
& & (0)(0)同意ls
hongzhong & &
& & (0)(0)窗体里,默认是可以设置窗体左边和顶端的坐标的
但是右边和,下边,是只读的
因此,你必须要计算屏幕,窗体的大小,来给窗体定坐标了
HONG鑫鑫 & &
& & (0)(0)问下Screen.PrimaryScreen.WorkingArea这是不是屏幕大小?mmpt789 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-当输入文字时需要打开输入法,而当打开输入法的时候输入法会直接盖掉下层的程序界面,导致有时候窗体下方的控件无法进行操作(输入文字,点击按钮等),那么这个时候就需要我们在输入法状态变更的时候出发一些事件,让输入法窗口不要盖住程序。
首先每次创建Form,最好都先添加一个panel做控件的上层容器,设定好相对panel的位置,这样控件才会根据panel的变化而变化。之后给InputPanel的EnabledChanged事件加入下面的代码:
&&&&&&& private void inputPanel1_EnabledChanged(object sender, EventArgs e)
&&&&&&&&&&& if (inputPanel1.Enabled)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& this.panel1.Dock = DockStyle.N
&&&&&&&&&&&&&&& this.panel1.Height = inputPanel1.VisibleDesktop.H
&&&&&&&&&&&&&&& foreach (Control ontrol in this.panel1.Controls)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& if (ontrol is TextBox&& ontrol.Focused)
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& this.panel1.AutoScrollPosition = ontrol.L
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& else
&&&&&&&&&&& {
&&&&&&&&&&&&&&& this.panel1.Dock = DockStyle.F
&&&&&&&&&&& }
当输入法打开的时候panel不再占据全屏,而是跟除了输入法外的可视化范围一样高。输入法关闭时,panel恢复占据全屏。当然panel的AutoScroll要设定为true。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:445113次
积分:7451
积分:7451
排名:第1194名
原创:300篇
转载:84篇
评论:39条
(1)(1)(1)(1)(1)(2)(2)(3)(5)(6)(13)(4)(15)(10)(11)(5)(11)(10)(13)(19)(62)(23)(30)(10)(12)(1)(8)(3)(6)(16)(6)(13)(14)(42)(4)(1)[电子书] Windows 8 应用程序开发 使用XAML和C# (英文版) - 下载频道
- CSDN.NET
&&&&[电子书] Windows 8 应用程序开发 使用XAML和C# (英文版)
[电子书] Windows 8 应用程序开发 使用XAML和C# (英文版)
☆ 资源说明:☆
[Apress] Windows 8 应用程序开发 使用XAML和C#
[Apress] Windows 8 App Projects XAML and C# Edition (E-Book)
☆ 出版信息:☆
[出版机构] Apress
[出版日期] 日
[图书页数] 228页
[图书语言] 英语
[图书格式] PDF格式
若举报审核通过,可奖励20下载分
被举报人:
gattaca2011
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行页面导航:
→ 正文内容 窗体控件进行线程安全调用
如何:对Windows 窗体控件进行线程安全调用
使用多线程提高 Windows 窗体应用程序的性能时,必须注意以线程安全方式调用控件。
访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。
.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 ,并提示消息:“从不是创建控件 control name 的线程访问它。”
此异常在调试期间和运行时的某些情况下可靠地发生。强烈建议您在显示此错误信息时修复此问题。在调试以 .NET Framework 2.0 版之前的 .NET Framework 编写的应用程序时,可能会出现此异常。
可以通过将
属性的值设置为 false 来禁用此异常。这会使控件以与在 Visual Studio 2003 下相同的方式运行。
下面的代码示例演示如何从辅助线程以线程安全方式和非线程安全方式调用 Windows 窗体控件。它演示一种以非线程安全方式设置
属性的方法,还演示两种以线程安全方式设置 Text 属性的方法。
using ponentM
using System.T
using System.Windows.F
namespace CrossThreadDemo
public class Form1 : Form
// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
// This thread is used to demonstrate both thread-safe and
// unsafe ways to call a Windows Forms control.
private Thread demoThread = null;
// This BackgroundWorker is used to demonstrate the
// preferred way of performing asynchronous operations.
private BackgroundWorker backgroundWorker1;
private TextBox textBox1;
private Button setTextUnsafeB
private Button setTextSafeB
private Button setTextBackgroundWorkerB
private ponentModel.IContainer components = null;
public Form1()
InitializeComponent();
protected override void Dispose(bool disposing)
if (disposing && (components != null))
components.Dispose();
base.Dispose(disposing);
// This event handler creates a thread that calls a
// Windows Forms control in an unsafe way.
private void setTextUnsafeBtn_Click(
object sender,
EventArgs e)
this.demoThread =
new Thread(new ThreadStart(this.ThreadProcUnsafe));
this.demoThread.Start();
// This method is executed on the worker thread and makes
// an unsafe call on the TextBox control.
private void ThreadProcUnsafe()
this.textBox1.Text = "This text was set unsafely.";
// This event handler creates a thread that calls a
// Windows Forms control in a thread-safe way.
private void setTextSafeBtn_Click(
object sender,
EventArgs e)
this.demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));
this.demoThread.Start();
// This method is executed on the worker thread and makes
// a thread-safe call on the TextBox control.
private void ThreadProcSafe()
this.SetText("This text was set safely.");
// This method demonstrates a pattern for making thread-safe
// calls on a Windows Forms control.
// If the calling thread is different from the thread that
// created the TextBox control, this method creates a
// SetTextCallback and calls itself asynchronously using the
// Invoke method.
// If the calling thread is the same as the thread that created
// the TextBox control, the Text property is set directly.
private void SetText(string text)
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
this.textBox1.Text =
// This event handler starts the form's
// BackgroundWorker by calling RunWorkerAsync.
// The Text property of the TextBox control is set
// when the BackgroundWorker raises the RunWorkerCompleted
private void setTextBackgroundWorkerBtn_Click(
object sender,
EventArgs e)
this.backgroundWorker1.RunWorkerAsync();
// This event handler sets the Text property of the TextBox
// control. It is called on the thread that created the
// TextBox control, so the call is thread-safe.
// BackgroundWorker is the preferred way to perform asynchronous
// operations.
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
this.textBox1.Text =
"This text was set safely by BackgroundWorker.";
#region Windows Form Designer generated code
private void InitializeComponent()
this.textBox1 = new System.Windows.Forms.TextBox();
this.setTextUnsafeBtn = new System.Windows.Forms.Button();
this.setTextSafeBtn = new System.Windows.Forms.Button();
this.setTextBackgroundWorkerBtn = new System.Windows.Forms.Button();
this.backgroundWorker1 = new ponentModel.BackgroundWorker();
this.SuspendLayout();
// textBox1
this.textBox1.Location = new System.Drawing.Point(12, 12);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(240, 20);
this.textBox1.TabIndex = 0;
// setTextUnsafeBtn
this.setTextUnsafeBtn.Location = new System.Drawing.Point(15, 55);
this.setTextUnsafeBtn.Name = "setTextUnsafeBtn";
this.setTextUnsafeBtn.TabIndex = 1;
this.setTextUnsafeBtn.Text = "Unsafe Call";
this.setTextUnsafeBtn.Click += new System.EventHandler(this.setTextUnsafeBtn_Click);
// setTextSafeBtn
this.setTextSafeBtn.Location = new System.Drawing.Point(96, 55);
this.setTextSafeBtn.Name = "setTextSafeBtn";
this.setTextSafeBtn.TabIndex = 2;
this.setTextSafeBtn.Text = "Safe Call";
this.setTextSafeBtn.Click += new System.EventHandler(this.setTextSafeBtn_Click);
// setTextBackgroundWorkerBtn
this.setTextBackgroundWorkerBtn.Location = new System.Drawing.Point(177, 55);
this.setTextBackgroundWorkerBtn.Name = "setTextBackgroundWorkerBtn";
this.setTextBackgroundWorkerBtn.TabIndex = 3;
this.setTextBackgroundWorkerBtn.Text = "Safe BW Call";
this.setTextBackgroundWorkerBtn.Click += new System.EventHandler(this.setTextBackgroundWorkerBtn_Click);
// backgroundWorker1
this.backgroundWorker1.RunWorkerCompleted += new ponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
this.ClientSize = new System.Drawing.Size(268, 96);
this.Controls.Add(this.setTextBackgroundWorkerBtn);
this.Controls.Add(this.setTextSafeBtn);
this.Controls.Add(this.setTextUnsafeBtn);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
#endregion
[STAThread]
static void Main()
Application.EnableVisualStyles();
Application.Run(new Form1());
对 Windows 窗体控件的非线程安全调用方式是从辅助线程直接调用。调用应用程序时,调试器会引发一个 InvalidOperationException,警告对控件的调用不是线程安全的。
C#// This event handler creates a thread that calls a
// Windows Forms control in an unsafe way.
private void setTextUnsafeBtn_Click(
object sender,
EventArgs e)
this.demoThread =
new Thread(new ThreadStart(this.ThreadProcUnsafe));
this.demoThread.Start();
// This method is executed on the worker thread and makes
// an unsafe call on the TextBox control.
private void ThreadProcUnsafe()
this.textBox1.Text = "This text was set unsafely.";
查询控件的
如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 。
如果 InvokeRequired 返回 false,则直接调用控件。
在下面的代码示例中,此逻辑是在一个称为 SetText 的实用工具方法中实现的。名为 SetTextDelegate 的委托类型封装 SetText 方法。TextBox 控件的 InvokeRequired 返回 true 时,SetText 方法创建 SetTextDelegate 的一个实例,并调用窗体的 Invoke 方法。这使得 SetText 方法被创建 TextBox 控件的线程调用,而且在此线程上下文中将直接设置 Text 属性。
C#// This event handler creates a thread that calls a
// Windows Forms control in a thread-safe way.
private void setTextSafeBtn_Click(
object sender,
EventArgs e)
this.demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));
this.demoThread.Start();
// This method is executed on the worker thread and makes
// a thread-safe call on the TextBox control.
private void ThreadProcSafe()
this.SetText("This text was set safely.");
// This method demonstrates a pattern for making thread-safe// calls on a Windows Forms control. //// If the calling thread is different from the thread that// created the TextBox control, this method creates a// SetTextCallback and calls itself asynchronously using the// Invoke method.//// If the calling thread is the same as the thread that created// the TextBox control, the Text property is set directly. private void SetText(string text){// InvokeRequired required compares the thread ID of the// calling thread to the thread ID of the creating thread.// If these threads are different, it returns true.if (this.textBox1.InvokeRequired){SetTextCallback d = new SetTextCallback(SetText);this.Invoke(d, new object[] { text });}else{this.textBox1.Text =}}
在应用程序中实现多线程的首选方式是使用
组件。BackgroundWorker 组件使用事件驱动模型实现多线程。辅助线程运行
事件处理程序,创建控件的线程运行
事件处理程序。注意不要从 DoWork 事件处理程序调用您的任何控件。
下面的代码示例不异步执行任何工作,因此没有 DoWork 事件处理程序的实现。TextBox 控件的 Text 属性在 RunWorkerCompleted 事件处理程序中直接设置。
C#// This event handler starts the form's
// BackgroundWorker by calling RunWorkerAsync.
// The Text property of the TextBox control is set
// when the BackgroundWorker raises the RunWorkerCompleted
private void setTextBackgroundWorkerBtn_Click(
object sender,
EventArgs e)
this.backgroundWorker1.RunWorkerAsync();
// This event handler sets the Text property of the TextBox
// control. It is called on the thread that created the
// TextBox control, so the call is thread-safe.
// BackgroundWorker is the preferred way to perform asynchronous
// operations.
private void backgroundWorker1_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
this.textBox1.Text =
"This text was set safely by BackgroundWorker.";
如果在窗体上使用 ActiveX 控件,则在调试器下运行时可能会收到线程间 InvalidOperationException。发生这种情况时,ActiveX 控件不支持多线程处理。有关使用 Windows 窗体的 ActiveX 控件的更多信息,请参见 。
如果您使用的是 Visual Studio,则可以通过禁用 Visual Studio 宿主进程来防止此异常发生。
使用任何一种多线程时,代码都容易产生非常严重而复杂的 bug。有关更多信息,请在实现使用多线程的任何解决方案之前参见。
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910

我要回帖

更多关于 windows10输入法设置 的文章

 

随机推荐