我正在向客户端发送请求到服务器进行登录,如果它被接受,主窗口将被隐藏,用户将开始处理名为user_form的表单2 ... user_form上的用户可以使用3个按钮(注销 - 退出 - 隐藏)
我希望从已经隐藏的主窗口中控制它们,
以下是我正在使用的主要代码代码......但它没有按我的意愿工作。
switch (client.LoginInfo.Limited)
{
case true:
this.Hide();
User_Form LF = new User_Form(client);
LF.AdminControlIsVisible = false;
DialogResult dr = LF.ShowDialog(this);
if (dr == System.Windows.Forms.DialogResult.Cancel)
{
//logout
}
else if (dr == System.Windows.Forms.DialogResult.OK)
{
if (client != null)
{
//hide
}
else
{
UpdateSystemMessage("No response from the server !!");
}
return;
}
break;
case false:
User_Form LF = new User_Form(client);
LF.AdminControlIsVisible = false;
DialogResult dr = LF.ShowDialog(this);
this.Visible = false;
if (dr == System.Windows.Forms.DialogResult.Cancel)
{
//logout
}
else if (dr == System.Windows.Forms.DialogResult.OK)
{
if (client != null)
{
//hide
}
else
{
UpdateSystemMessage("No response from the server !!");
}
return;
}
break;
}
任何解决方案?
答案 0 :(得分:1)
我通过添加一个新线程来修复它来运行.net套接字而不是主线程。
答案 1 :(得分:0)
如果您只是希望很好地控制在一个表单上显示的内容,从另一个表单,也许这可以帮助您...(您没有提供相关代码来举例说明使用您的项目,所以我刚刚制作通过使用保存模型数据并由两种形式共享的对象,可以改变彼此背景颜色的2种形式,而不会相互“了解”...)
Form1.cs中:
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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
MyModelClass model = new MyModelClass();
public Form1()
{
InitializeComponent();
model.AnotherColor = model.AColor = System.Drawing.Color.FromKnownColor(KnownColor.Control);
bindingSource1.DataSource = model;
this.DataBindings.Add("BackColor", bindingSource1, "AColor");
this.DataBindings.Add("Visible", bindingSource1, "ABool");
new Form2(model).Show();
}
private BindingSource bindingSource1;
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private Button button5;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(12, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(127, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Form2 -> green";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(12, 41);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(127, 23);
this.button2.TabIndex = 1;
this.button2.Text = "Form2 -> red";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(12, 70);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(127, 23);
this.button3.TabIndex = 2;
this.button3.Text = "Form2 -> Visible";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button4
//
this.button4.Location = new System.Drawing.Point(12, 99);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(127, 23);
this.button4.TabIndex = 3;
this.button4.Text = "Form2 -> Invisible";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(46, 159);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(106, 42);
this.button5.TabIndex = 4;
this.button5.Text = "some important form1 button";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.button5);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
model.AnotherColor = Color.Green;
model.doSomething();
}
private void button2_Click(object sender, EventArgs e)
{
model.AnotherColor = Color.Red;
model.doSomething();
}
private void button3_Click(object sender, EventArgs e)
{
model.AnotherBool = true;
}
private void button4_Click(object sender, EventArgs e)
{
model.AnotherBool = false;
}
private void button5_Click(object sender, EventArgs e)
{
model.someImportantMethod();
}
}
}
Form2.cs:
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;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
MyModelClass model;
private Button button4;
private Button button3;
private Button button5;
int callCounter = 0;
public Form2(MyModelClass model)
{
InitializeComponent();
this.model = model;
bindingSource1.DataSource = model;
DataBindings.Add("BackColor", bindingSource1, "AnotherColor");
this.DataBindings.Add("Visible", bindingSource1, "AnotherBool");
model.PropertyChanged += new PropertyChangedEventHandler(model_PropertyChanged);
}
void model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
label1.Text = String.Format("PropertyChanged was called {0} times.", ++callCounter);
}
private BindingSource bindingSource1;
private Button button2;
private Button button1;
private Label label1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.button2 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.button4 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
this.SuspendLayout();
//
// button2
//
this.button2.Location = new System.Drawing.Point(18, 41);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(127, 23);
this.button2.TabIndex = 3;
this.button2.Text = "Form1 -> red";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button1
//
this.button1.Location = new System.Drawing.Point(18, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(127, 23);
this.button1.TabIndex = 2;
this.button1.Text = "Form1 -> green";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(15, 231);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(181, 13);
this.label1.TabIndex = 4;
this.label1.Text = "PropertyChanged was called 0 times.";
//
// button4
//
this.button4.Location = new System.Drawing.Point(18, 99);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(127, 23);
this.button4.TabIndex = 6;
this.button4.Text = "Form1 -> Invisible";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(18, 70);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(127, 23);
this.button3.TabIndex = 5;
this.button3.Text = "Form1 -> Visible";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(154, 164);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(94, 40);
this.button5.TabIndex = 7;
this.button5.Text = "some less important button";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// Form2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.button5);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.label1);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form2";
this.Text = "Form2";
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
model.AColor = Color.Green;
model.doSomething();
}
private void button2_Click(object sender, EventArgs e)
{
model.AColor = Color.Red;
model.doSomething();
}
private void button3_Click(object sender, EventArgs e)
{
model.ABool = true;
}
private void button4_Click(object sender, EventArgs e)
{
model.ABool = false;
}
private void button5_Click(object sender, EventArgs e)
{
MessageBox.Show("some less important button was clicked ... \nnow calling the same method that's called from form1's important button");
model.someImportantMethod();
}
}
}
MyModelClass.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
public class MyModelClass : System.ComponentModel.INotifyPropertyChanged
{
private System.Drawing.Color _aColor;
public System.Drawing.Color AColor
{
get { return _aColor; }
set {
_aColor = value;
fireChanged("AColor");
}
}
private System.Drawing.Color _anotherColor;
public System.Drawing.Color AnotherColor
{
get { return _anotherColor; }
set {
_anotherColor = value;
fireChanged("AnotherColor");
}
}
private bool _aBool = true;
public bool ABool
{
get { return _aBool; }
set
{
_aBool = value;
fireChanged("ABool");
}
}
private bool _anotherBool = true;
public bool AnotherBool
{
get { return _anotherBool; }
set
{
_anotherBool = value;
fireChanged("AnotherBool");
}
}
public void doSomething()
{
//some function here
System.Windows.Forms.MessageBox.Show("doSomething() was called");
}
private void fireChanged(string name)
{
var evth = PropertyChanged;
if (evth != null)
evth(this, new System.ComponentModel.PropertyChangedEventArgs(name));
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
internal void someImportantMethod()
{
System.Windows.Forms.MessageBox.Show("some important mehod, that is usually called from a button in from1");
}
}
}
编辑:
如果您想在表单上触发其他操作,您还可以在模型类上定义自己的事件并像PropertyChanged
使用您的事件的类应该只是注册一个事件处理程序,就像Form2这样更新调用计数器
edit2:更改了示例代码以显示隐藏表单并将代码从button_click处理程序重定位到单独的方法
答案 2 :(得分:0)
如果我明白你想要做什么,一个简单的方法就是你控制的形式具有公开的功能,当被叫时影响形式。然后,您需要将这些表单的实例传递给控件的表单(通常在构造函数中)。然后,您可以从控制器表单中调用这些功能,从而影响受控表单。
示例:
public class ControlledForm : Form
{
//...
//This founction will affect the form
public void DoSomething(int Params)
{
//Affect Form
}
private void SomethingEventHandler() //function that calls the new form and hides this one
{
//Give the construction this (the instance of the form) in parameter
ControllerForm newControllerForm = new ControllerForm(this);
newControllerForm.Show();
this.Hide();
}
}
public class ControllerForm : Form
{
//Constructor that receives the instance of the controlled form in parameter
public ControllerForm(ControlledForm CF)
{
_ControlledForm = CF;
InitializeComponents();
}
private ControlledForm _ControlledForm;
private void SomethingElseEventHandler() //Function that modifies the controlled form
{
//This will effectively affect the form
_ControlledForm.DoSomething(12);
}
}
如果那可以解答你的问题,我不会这样做,但这就是我遇到这个问题的原因。