现在有一个函数:
private void Capture(){
    Button btn=new Button();//生成一个按钮,但还没显示出来
    
    ...................
    //需要获得按钮的图片
    ...................    btn.Dispose();//释放按钮
}
现在不知道获得按钮图片应该怎么作,(按钮始终是不会显示出来的,在代码中只是生成了,在用完后就释放了,界面上永远不会出现该控件)我把这个叫做"内存截图";不知道有没有那位仁兄知道的,请指点哈`~`~
谢谢了`~`~`~

解决方案 »

  1.   

    to 现在不知道获得按钮图片应该怎么作,(按钮始终是不会显示出来的,在代码中只是生成了,在用完后就释放了,界面上永远不会出现该控件)首先button产生,与button显示是两回事,也就是说你如上的代码只是产生了一个button,并没有显示,因此你无法通过graphics或者hdc来获得button的样式。如果你只是生成一个button样式,你可以直接去画一个不就行了。
      

  2.   

    你做的是Webfrom的吧?在内存中创建的控件必须添加到页面对象容器里(如Page.Controls)或页面对象里的子对象容器里(如:在页面里添加的一个PlaceHolder控件),它才会随页面一起生成并最终显示出来!
      

  3.   

    我的是windows程序哈,不是web程序主要是我的控件不一定是BUTTON,还有很多的控件,我只是拿BUTTON来举个例,呵呵还有,直接画一个是不现实的,因为控件很多是自定义控件,控件随时都有可能被改变,这个时候,我截图出来的图形也就必须随着改变另外,我之前也作了屏幕截图,但由于屏幕截图也不能满足要求,主要是控件被另外一个控件或什么遮挡住的时候,截图就不行了(截出的图就是不对的)难道c#真的没办法从内存中把控件的图形截出来?(我不知道哈)
    项目是c#的,没办法`~`~`~继续请教`~`~
      

  4.   

    Knight94(愚翁) 
    你的话使我想起了这样一个问题:
    是不是如果我将该控件显示出来了,就可以获得该控件的图片了?我能不能private void Capture(){
    Button btn=new Button();//生成一个按钮,但还没显示出来
    btn.visiable=true;
    this.controls.Add(btn);//让该控件显示出来
    ...................
    //需要获得按钮的图片
    ...................btn.Dispose();//释放按钮
    }是不是这样就可以生成该控件的图片 了?
      

  5.   

    你的代码有些问题,需要在
    Button btn=new Button();//生成一个按钮,但还没显示出来
    btn.visiable=true;
    this.controls.Add(btn);//让该控件显示出来
    之后,加上
    this.Refresh();
    然后再去获取。
      

  6.   

    顶,MS有个例子,不过用的MS自己的System.Windows.Forms.Design 包的东西。不知道对你有永不
      

  7.   

    public  class Form1 : Form
        {
            public Form1()
            {
            }        private void Form1_Load(object sender, EventArgs e)
            {
                Control ctrl = new Button();
                if (!ctrl.IsHandleCreated)
                {
                    ctrl.CreateControl();
                }
                Bitmap drawSurface = new Bitmap(ctrl.Width, ctrl.Height);            using (Graphics g = Graphics.FromImage(drawSurface))
                {
                    IntPtr hDc = g.GetHdc();
                    SendMessage(ctrl.Handle, WM_PAINT, hDc, IntPtr.Zero);
                    g.ReleaseHdc(hDc);
                }
                this.BackgroundImage = drawSurface;
            }        public const int WM_PAINT = 0x00f;        [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
            public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
        }
      

  8.   

    问题解决了,非常感谢大家的帮忙
    特别是 lalac(水月流影)
    结贴`~`~1!1!