当前位置:编程学习 > C#/ASP.NET >>

怎样设置dll窗口最大化?

给A程序扩展了一个窗体(B.dll)。在A的菜单中显示B.dll的名称B。当用鼠标选择B的时候,希望B.dll中的窗体能够最大化显示,请问给怎么处理??? C# dll  --------------------编程问答-------------------- B b=new B();
b.WindowState = FormWindowState.Maximized;
b.Show(); --------------------编程问答-------------------- 1楼方法正解 --------------------编程问答--------------------
引用 1 楼 gxingmin 的回复:
B b=new B();
b.WindowState = FormWindowState.Maximized;
b.Show();



补充:A软件是我们购买的,他们给了一个接口,我在这个接口的基础上写了B程序。具体的实现不是很了解,现在的情况是在A软件的菜单中显示了B程序的一个图标,选中这个图标后弹出的B程序界面很小,希望B程序能够最大化显示。

--------------------编程问答-------------------- B程序是你自己写的,你难道不能设置大点吗?
你可以在B的Form_Load里设置
this.WindowState = FormWindowState.Maximized; --------------------编程问答--------------------
引用 4 楼 gxingmin 的回复:
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? --------------------编程问答--------------------
引用 6 楼 gxingmin 的回复:
B是Form还是UserControl?


B是UserControl?  --------------------编程问答-------------------- 那你说B里的窗体,是什么意思? --------------------编程问答-------------------- 自己定义一个FORM  把边框去掉
把B   ADD  到 FORM里
设置b.dock = fill
form.WindowState = FormWindowState.Maximized; --------------------编程问答--------------------
引用 9 楼 rinall 的回复:
自己定义一个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;
}
}
--------------------编程问答--------------------
引用 14 楼 rinall 的回复:
如果B继承的是usercontrol
B外面怎么会还有边框? 那个MPDemo是  自己的还是别人的?
自己写个Form1:Form
C# code?1234567891011public Form1:Form{   Bmodbus_config b=null;     public Form1(){    b=new Bmodbus_config();    th……


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”
      }
} --------------------编程问答--------------------
引用 15 楼 hongyancl 的回复:
引用 14 楼 rinall 的回复:如果B继承的是usercontrol
B外面怎么会还有边框? 那个MPDemo是  自己的还是别人的?
自己写个Form1:Form
C# code?1234567891011public Form1:Form{   Bmodbus_config b=null;     public Form1(){    b=new Bmod……


你自己写的MPDemo为什么不让它最大化?  应该是把B放到MPDemo里面了吧   把B.Dock设为Fill
把MPDemo最大化就可以了 --------------------编程问答-------------------- 那就把窗体.TopLevel = false;试试 --------------------编程问答--------------------
引用 16 楼 rinall 的回复:
引用 15 楼 hongyancl 的回复:引用 14 楼 rinall 的回复:如果B继承的是usercontrol
B外面怎么会还有边框? 那个MPDemo是  自己的还是别人的?
自己写个Form1:Form
C# code?1234567891011public Form1:Form{   Bmodbus_config b=null;     public ……


怀疑软件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加载了一个父窗口。 --------------------编程问答--------------------
引用 19 楼 hongyancl 的回复:
继续18楼:
效果还是没有改善。现在怀疑A.exe给mpdemo.dell加载了一个父窗口。

A.exe是什么   不是你写的吗?  这都是什么关系啊
A B都是别人的 你写个中间层? --------------------编程问答--------------------
引用 20 楼 rinall 的回复:
引用 19 楼 hongyancl 的回复:继续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;

就行了

以下是我的程序

/// <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 也就是用户控件最大化 使用WindowState是不可能的

因为DLL 也就是用户控件 他不继承Form所以那东西根本没有..

建议 你实例化的时候 给他的宽以及高赋值,这个就根据你实际的需求来了

比如你容器的大小或者分辨率什么的.

f.TopLevel = false;


这个问题 是针对 你的错误来说的 --------------------编程问答-------------------- 如果宿主项目是.Net的
引用 13 楼 lye2000000_super 的回复:
在load事件里
this.FindForm().WindowState = FormWindowState.Maximized;


如果是其他类型的,获取所在窗体的Handler,然后发Windows消息 --------------------编程问答--------------------
引用 25 楼 assky124 的回复:
如果宿主项目是.Net的
引用 13 楼 lye2000000_super 的回复:在load事件里
this.FindForm().WindowState = FormWindowState.Maximized;

如果是其他类型的,获取所在窗体的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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,