通常,我使用以下方法编写可(优雅地)调整大小的表单。
using System.Drawing;
using System.Windows.Forms;
namespace silly
{
public class Form1 : Form
{
private GroupBox g;
private Button b1, b2;
public Form1()
{
Init();
}
private void Init()
{
//create and add controls.
this.Controls.Add(g = new GroupBox());
g.Controls.AddRange(new Control[] {
b1 = new Button(),
b2 = new Button()});
g.Text = "group";
b1.Text = "b1";
b2.Text = "b2!";
b1.AutoSize = b2.AutoSize = true;
g.Resize += new System.EventHandler(g_Resize);
}
private void g_Resize(object sender, System.EventArgs e)
{
b1.Size = b2.Size = new …Run Code Online (Sandbox Code Playgroud) 我有一个函数可以根据控件名称和输入命令更改控件的属性。
public void SetControl(string ControlName, string Operation)
{
Control Control = this.Controls.Find(ControlName, true)[0];
switch (Operation)
{
case "ok":
Control.BackColor = Color.Green;
Control.ForeColor = Color.Black;
break;
case "error":
Control.BackColor = Color.Red;
Control.ForeColor = Color.Blue;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否还有什么方法可以传递属性名称?当然我可以做这样的事情:
if (propertyname=="ForeColor")
{Control.ForeColor = Color.Black;}
Run Code Online (Sandbox Code Playgroud)
但我应该对我要更改的所有属性执行此操作!有没有办法根据名称查找并更改属性?
我看到了很多关于如何从不同线程编辑 c# 表单上的控件的问题,但对我来说没有多大意义。我知道您不能从主线程以外的其他线程更改任何 UI。为了使这项工作有效,您必须使用调用并从那里安全地编辑控件?
我有一个按钮开始写入文件,当您按下按钮时,按钮本身就会被禁用,因此您无法启动执行完全相同操作的多个线程。写入完成后,我希望按钮再次可用,但我无法让它在另一个线程上工作。
我将其作为表单中的Generate_Click 事件。
private void Generate_Click(object sender, EventArgs e)
{
Generate.Enabled = false;
int x = 512;
int y = 512;
MBrot mbrot = new MBrot(x, y);
PB_Update lb = new PB_Update(0, y, Generator_PB, Generate, mbrot, this);
lb.Start();
}
Run Code Online (Sandbox Code Playgroud)
这是 PB_Update.cs 中的 ThreadWork() 函数,当 while 循环完成时,对文件的写入完成,线程也完成,因此它结束并给出一个带有“finished”的消息框,现在作为最后一个按钮需要再次启用。
public void ThreadWork()
{
while (true)
{
if (currValue_ >= maxValue_)
break;
ThreadTick();
}
mb_.StopBrot();
t_.Interrupt();
MessageBox.Show("Finished!");
Generate_.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Visual Studio C# 找到一个 ActiveX 控件,但它看起来像是旧版本。
我需要:
可以集成到我的应用程序窗口(而不是单独的窗口)内的浏览器
对 CSS、js 和其他 Web 技术的良好支持,可与任何现代浏览器相媲美
基本的浏览器功能,如“导航”、“后退”、“重新加载”...自由访问页面代码和输出。
我想在一个标签中显示来自用户的输入信息,但我在运行时无法在标签中显示性别选项
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
if (male.isSelected()) {
info.setText(male.getText());
}
if (female.isSelected()) {
info.setText(female.getText());
}
}
});
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
info.setText(nameField.getText()+ "\n"+ noField.getText() +"\n"+ emaileField.getText() );
}
});
Run Code Online (Sandbox Code Playgroud) WPF真正"准备好"时的"指标"是Visual Studio中提供了menustrip控件.如果没有这个,从我的角度来看,它仍然在"建设中",与winforms相比.这不是技术论证,只是个人偏好.
所以我的问题是:Visual Studio何时会出现WPF menustrip控件?例如,这是否会出现在Visual Studio 2010的最终版本中?
我有一个简单的WPF应用程序与webbrowser控件.当我指示控件加载页面时,我希望控件告诉服务器它正在尝试加载页面,因为它是移动设备,因此加载较小版本的页面.我知道很多网站的地址之前只加移动,所以google.com的移动网页是mobile.google.com,但我不知道是否有装载有Web服务器自动将我的浏览器控件的方式该网站的移动版本?我觉得应该有一个非常简单的方法来做到这一点,但我只是想不通:).
提前致谢!!!
我遇到了麻烦.我创建了一个标签对象.
var lbl:Tlabel;
begin
lbl:=TLabel.Create(nil);
....
Run Code Online (Sandbox Code Playgroud)
好的,但是在摧毁它之后,它仍然在形式上.有我的代码:
lbl.free;
lbl := nil;
Run Code Online (Sandbox Code Playgroud)
执行后,控件保持在窗体上.有解决方案吗?我需要销毁这个组件,这应该从形式上消失.谢谢.
编辑:RemoveControl(AControl:TControl); 程序不起作用.EDIT2:
for I := 0 to 4 do begin
lbl:=TLabel.Create(nil);
lbl.Top := 100+z*i;
lbl.Left := 88;
Lbl.Width := 80;
Lbl.Height := 14;
lbl.Font.Size := 9;
lbl.Caption := nm[i];
Form1.InsertControl(lbl);
Run Code Online (Sandbox Code Playgroud)
这种控制保持在形式上.
我们可以通过名称找到控件并使用C#中的单个命令更改属性吗?我有这个:
TextBlock tb = mainGrid.FindName("FirstNameTextBlock") as TextBlock;
tb.Visibility = Visibility.Collapsed;
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个命令来做?这不起作用,但是这样的事情:
(TextBlock)mainGrid.FindName("FirstNameTextBlock").Visibility = Visibility.Collapsed;
Run Code Online (Sandbox Code Playgroud) 我有启用/禁用控件的窗体,表示窗体处于忙或空闲状态.我需要启用一个控件(一个按钮,但可能是其他),当它被禁用以中止某个进程时.我将按钮标题更改为"ABORT".
我点击按钮A,我将按钮A的标题改为'ABORT'.所有其他控件将被禁用,但我想要一个标题为"ABORT"的按钮仍然启用.
procedure F1.FormBusy (sender);
var
a: Integer;
begin
for a := 0 to TabSheet1.ControlCount - 1 do
begin
TabSheet1.Controls[a].Enabled := False;
(* if TabSheet1.Controls[a] caption := 'ABORT' then
TabSheet1.Controls[a].Enabled := True
< how to do this ? *)
end;
end;
Run Code Online (Sandbox Code Playgroud)
用法示例:
procedure F1.LB1Click(sender: TObject);
begin
FormBusy(sender);
try
// do something
finally
FormIdle(sender);
end;
end;
Run Code Online (Sandbox Code Playgroud) 我有两列,如何动态添加一个或两个控件...每次创建一行...
我还想通过迭代动态创建列.
我如何实现这一目标?
我创建了一个表单.我在其上放了2个面板,即"Panel1"和"Panel2".我在"Panel2"中放了一个按钮.
然后我在表单中添加了另一个按钮,即"Button2".
单击"Button2"执行以下代码:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.Panel2.Parent = Me.Panel1
' Me.Panel1.Location = New Point(0, 0) this does not work either
End Sub
Run Code Online (Sandbox Code Playgroud)
当我点击"Button2"时,"Panel2"就会消失.我希望"Panel2"放在"Panel1"中,但是那里没有显示.
有人看到我做错了吗?
感谢您的帮助!
您好我有这个方法创建一个按钮数组,我想让它包装在方法中,因为我将使用它几次:
void CreatingButtons(int n, List<string> names)
{
Button[] Buttons = new Button[n];
int horizontal = 180; int vertical = 5;
int Height = 33; int Width = 350 / Buttons.Length;
for (int i = 0; i < Buttons.Length; i++)
{
Buttons[i] = new Button();
Buttons[i].Height = Height;
Buttons[i].Width = Width;
this.Controls.Add(Buttons[i]);
Buttons[i].Text = names[i];
Buttons[i].TextAlign = ContentAlignment.MiddleCenter;
Buttons[i].Location = new Point(horizontal, vertical);
horizontal += Buttons[i].Width;
Buttons[i].Click += (o, k) => { };
}
}
Run Code Online (Sandbox Code Playgroud)
我想在这里返回新创建的按钮数组
private void bHow_Click(object sender, EventArgs …Run Code Online (Sandbox Code Playgroud)