怎样设置dll窗口最大化?
给A程序扩展了一个窗体(B.dll)。在A的菜单中显示B.dll的名称B。当用鼠标选择B的时候,希望B.dll中的窗体能够最大化显示,请问给怎么处理??? C# dll --------------------编程问答-------------------- B b=new B();b.WindowState = FormWindowState.Maximized;
b.Show(); --------------------编程问答-------------------- 1楼方法正解 --------------------编程问答--------------------
补充:A软件是我们购买的,他们给了一个接口,我在这个接口的基础上写了B程序。具体的实现不是很了解,现在的情况是在A软件的菜单中显示了B程序的一个图标,选中这个图标后弹出的B程序界面很小,希望B程序能够最大化显示。
--------------------编程问答-------------------- B程序是你自己写的,你难道不能设置大点吗?
你可以在B的Form_Load里设置
this.WindowState = FormWindowState.Maximized; --------------------编程问答--------------------
dll文件 public partial class modbus_config : Form这样提示错误
只能改成 public partial class modbus_config : UserControl
在这种条件下this.WindowState = FormWindowState.Maximized;是不能应用的。
--------------------编程问答-------------------- B是Form还是UserControl? --------------------编程问答--------------------
B是UserControl? --------------------编程问答-------------------- 那你说B里的窗体,是什么意思? --------------------编程问答-------------------- 自己定义一个FORM 把边框去掉
把B ADD 到 FORM里
设置b.dock = fill
form.WindowState = FormWindowState.Maximized; --------------------编程问答--------------------
你好,大虾,
菜鸟一枚。您的回答我不是很清楚,具体描述一下我的任务:
A软件是我们购买的,给了一个接口,在这个接口的基础上写了B程序(以dll方式发布),将B.dll放在A的安装目录下,在A软件的菜单中显示了B程序的一个图标,选中这个图标后弹出的B程序界面很小,希望B程序能够最大化显示。
我按您给的答复,程序
namespace Modbus
{
[ComVisible(true)]
[Guid("8B33A18F-92D7-4e87-96AF-3E2DADFBAD90")]
[ProgId("MPDemo")]
public partial class modbus_config : Form, IAdeAddIn
{}
public modbus_config()
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
}
}
出现
我在网上找了一下,说将Form改成UserControl就可以,现在程序是
namespace Modbus
{
[ComVisible(true)]
[Guid("8B33A18F-92D7-4e87-96AF-3E2DADFBAD90")]
[ProgId("MPDemo")]
public partial class modbus_config : UserControl, IAdeAddIn
{}
public modbus_config()
{
InitializeComponent();
//this.WindowState = FormWindowState.Maximized; //“Modbus.modbus_config”不包含“WindowState”的定义,并且找不到可接受类型为“Modbus.modbus_config”的第一个参数的扩展方法“WindowState”
}
}
A软件运行起来之后,如下图
在B的外面还有父窗口。
请问大虾,怎么处理合适。 --------------------编程问答-------------------- IAdeAddIn这个接口里都有什么方法和属性呢?
人家的接口看看是不是提供了你需要的。 --------------------编程问答-------------------- 如果没有。那么你就用findform方法找到父窗口。看看设置最大化是不是可以。 --------------------编程问答-------------------- 在load事件里
this.FindForm().WindowState = FormWindowState.Maximized; --------------------编程问答-------------------- 如果B继承的是usercontrol
B外面怎么会还有边框? 那个MPDemo是 自己的还是别人的?
自己写个Form1:Form
--------------------编程问答--------------------
public Form1:Form
{
Bmodbus_config b=null;
public Form1()
{
b=new Bmodbus_config();
this.control.add(b);
b.dock=Fill;
this.WindowState = FormWindowState.Maximized;
}
}
MPDemo是我自己写的(B程序名称是MPDemo.dll),在VS中的界面如下
将MPDemo.dll放在A软件的安装目录下,显示的界面如下
B程序现在为
namespace Modbus
{
[ComVisible(true)]
[Guid("8B33A18F-92D7-4e87-96AF-3E2DADFBAD90")]
[ProgId("MPDemo")]
public partial class modbus_config : UserControl, IAdeAddIn
{}
public modbus_config()
{
InitializeComponent();
//this.WindowState = FormWindowState.Maximized; //“Modbus.modbus_config”不包含“WindowState”的定义,并且找不到可接受类型为“Modbus.modbus_config”的第一个参数的扩展方法“WindowState”
}
} --------------------编程问答--------------------
你自己写的MPDemo为什么不让它最大化? 应该是把B放到MPDemo里面了吧 把B.Dock设为Fill
把MPDemo最大化就可以了 --------------------编程问答-------------------- 那就把窗体.TopLevel = false;试试 --------------------编程问答--------------------
怀疑软件A.exe对我们的程序MPDemo.dll进行了处理。
MPDemo.dll的程序是:
namespace Modbus
{
[ComVisible(true)]
[Guid("8B33A18F-92D7-4e87-96AF-3E2DADFBAD90")]
[ProgId("MPDemo")]
public partial class modbus_config : UserControl, IAdeAddIn
{}
public modbus_config()
{
InitializeComponent();
//this.WindowState = FormWindowState.Maximized; //“Modbus.modbus_config”不包含“WindowState”的定义,并且找不到可接受类型为“Modbus.modbus_config”的第一个参数的扩展方法“WindowState”
}
}
由于MPDemo.dll中继承了UserControl,不存在WindowState 这个属性,所以没法用this.WindowState = FormWindowState.Maximized;
如果MPDemo.dll继承Form,A程序运行的时候提示错误。
按照15楼的建议,
namespace Modbus
{
[ComVisible(true)]
[Guid("8B33A18F-92D7-4e87-96AF-3E2DADFBAD90")]
[ProgId("MPDemo")]
public partial class modbus_config : UserControl, IAdeAddIn
{}
public modbus_config()
{
InitializeComponent();
this.Dock = DockStyle.Fill;
//this.WindowState = FormWindowState.Maximized; //“Modbus.modbus_config”不包含“WindowState”的定义,并且找不到可接受类型为“Modbus.modbus_config”的第一个参数的扩展方法“WindowState”
}
} --------------------编程问答-------------------- 继续18楼:
效果还是没有改善。现在怀疑A.exe给mpdemo.dell加载了一个父窗口。 --------------------编程问答--------------------
A.exe是什么 不是你写的吗? 这都是什么关系啊
A B都是别人的 你写个中间层? --------------------编程问答--------------------
不好意思,我表述出现了问题。A.exe不是我写的,我写的MPDemo.dll(所谓的B程序)。将MPDemo.dll放在A.exe的安装目录下,运行A.exe时,在A的菜单中出现了一个MPDemo的子菜单
现在我能操作的就是MPDemo.dll(所谓的B程序)。MPDemo.dll(所谓的B程序)的程序如下:
namespace Modbus
{
[ComVisible(true)]
[Guid("8B33A18F-92D7-4e87-96AF-3E2DADFBAD90")]
[ProgId("MPDemo")]
public partial class modbus_config : UserControl, IAdeAddIn
{}
public modbus_config()
{
InitializeComponent();
}
}
其中:public partial class modbus_config : UserControl, IAdeAddIn
继承的是UserControl,不能实现this.WindowState = FormWindowState.Maximized; 程序编译提示错误:“Modbus.modbus_config”不包含“WindowState”的定义,并且找不到可接受类型为“Modbus.modbus_config”的第一个参数的扩展方法“WindowState”
我试着将public partial class modbus_config : UserControl, IAdeAddIn修改为
public partial class modbus_config : Form, IAdeAddIn,在调试的时候出现下面的错误
我这样解释可以吗。附两张工程属性
--------------------编程问答-------------------- [ComVisible(true)]这句去掉
继承Form
还有个问题是 A把你的Form放到了一个窗体里 你需要得到A的对象才能控件大小
因为子控件不能大过父控件 --------------------编程问答-------------------- 哈哈 我知道是什么问题的
frm_task f = new frm_task();
f.FormBorderStyle = FormBorderStyle.None;
f.TopLevel = false;
f.Dock = System.Windows.Forms.DockStyle.Fill;
panel1.Controls.Add(f);
f.Show();
注意
f.TopLevel = false;
就行了
以下是我的程序
--------------------编程问答-------------------- 还有一点说明下 如果你要给DLL 也就是用户控件最大化 使用WindowState是不可能的
/// <summary>
/// 主控件窗体
/// </summary>
[Guid("51C1ED13-1D4E-4264-B614-F14E33E50DFB")]
public partial class Main : UserControl, Libary.Controls.IObjectSafety
{
public Main()
{
InitializeComponent();
/*
int w = Screen.PrimaryScreen.Bounds.Width;
int h = Screen.PrimaryScreen.Bounds.Height;
this.Width =1020;
this.Height = 50;
panel1.Width = this.Width - 5;
*/
tool.InitButtonBig(button1);
tool.InitButtonBig(button2);
tool.InitButtonBig(button3);
tool.InitButtonBig(button4);
tool.InitButtonBig(button5);
//tool.InitButtonBig(button4);
}
#region IObjectSafety 成员
public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}
public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
throw new NotImplementedException();
}
#endregion
[SecuritySafeCritical]
public void Login(string UserID)
{
LoginUser.User = new dosoft.BLL.xt_tc_User().GetModel(UserID);
}
[SecuritySafeCritical]
private void button1_Click_1(object sender, EventArgs e)
{
//外置下达
Disposed();
frm_task f = new frm_task();
f.FormBorderStyle = FormBorderStyle.None;
f.TopLevel = false;
f.Dock = System.Windows.Forms.DockStyle.Fill;
panel1.Controls.Add(f);
f.Show();
}
}
因为DLL 也就是用户控件 他不继承Form所以那东西根本没有..
建议 你实例化的时候 给他的宽以及高赋值,这个就根据你实际的需求来了
比如你容器的大小或者分辨率什么的.
f.TopLevel = false;
这个问题 是针对 你的错误来说的 --------------------编程问答-------------------- 如果宿主项目是.Net的
如果是其他类型的,获取所在窗体的Handler,然后发Windows消息 --------------------编程问答--------------------
A.exe是.Net的项目。用SendMessage试过,没有什么起色,应该是使用的问题,大虾能给个例子吗?? --------------------编程问答-------------------- this.WindowState = FormWindowState.Maximized;
public partial class modbus_config : UserControl
=>
this.ParentForm.WindowState = FormWindowState.Maximized; 这种仅当对方用Form.Show来显示你的窗口有效
如果是将你的控件放在他指定的容器里,那还要看窗器的尺寸,是否允许滚动等设置 --------------------编程问答-------------------- 是窗口的话可以直接调用 Windows API 将其最大化显示
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
private static extern int ShowWindow(IntPtr hWnd, int nCmdShow);
使用
ShowWindow(hWnd, value);//后面那个参数1代表正常窗口显示,2代表最小化显示,3代表最大化显示
补充:.NET技术 , C#