开发者

How to save a Control Array [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 10 years ago.

I have this code that allow the user to create a button array, any were in a from. Here and here are two samples of what I am doing (on Create an account now? Click NO and then download the zip file).

The problem or questions is as follow:

I need to save what ever the user makes: for example if he added 5 buttons and saved it, next time when he opens his saved file he will see the 5 button in the same place he save them. This will allow the user to send the file to another person with the same program and the other person take a look at the created file.


Because of the misunderstanding (comments below) I will post some code with is the second link above. BUT the problem is that I cant find any code to do what I am asking. guys i do not have any idea on how to even start, I mean I know how to save a image from a picture box or some text but the button array is another thing.

Here is the code Simple example code or you can download the second file posted by me and compile it.

ButtomArray.cs

using System;
using System.Collections;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ManageControls
{
    public delegate void SendSelectedButton(object sender);
    public class ButtonArray : Hashtable
    {
        private readonly Form HostForm;
        public event SendSelectedButton SelectedButton;
        Point buttonLocation;
        int cntButton = 0;

        public ButtonArray(Form host)
        {
            HostForm = host;
        }

        public void AddButton(int left, int top)
        {
           Button btnElement = new Button();

           btnElement.Top = top;
           btnElement.Left = left;
           btnElement.Tag = cntButton;
           btnElement.Cursor = System.Windows.Forms.Cursors.Default;
           btnElement.FlatStyle = System.Windows.Forms.FlatStyle.System;
           btnElement.Text = "Button " + cntButton.ToString();
           btnElement.Click += new EventHandler(btnElement_Click);
           btnElement.MouseDown += new MouseEventHandler(btnElement_MouseDown);
           btnElement.MouseMove += new MouseEventHandler(btnElement_MouseMove);
           this.Add(cntButton.ToString(), btnElement);
           HostForm.Controls.Add(btnElement);
           btnElement.BringToFront();
           cntButton++;
        }

        public void RemoveButton(string btnIndex)
        {
            if (this.Count > 0)
            {
                HostForm.Controls.Remove((Button)this[btnIndex]);
                this.Remove(btnIndex);
            }
        }

        private void btnElement_Click(Object sender, System.EventArgs e)
        {
            if(null != SelectedButton)
                SelectedButton(sender);
        }

       private void btnElement_MouseDown(object sender, MouseEventArgs e)
       {
           buttonLocation = e.Location;
       }

       private void btnElement_MouseMove(object sender, MouseEventArgs e)
       {
           if (e.Button == MouseButtons.Left)
          {
              ((Button)sender).Left += e.X - buttonLocation.X;
               ((Button)sender).Top += e.Y - buttonLocation.Y;
          }
       }

    }
}

frmMain.cs

using System;
using System.Collections;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ManageControls
{
    public partial class frmMain : Form
    {
        ButtonArray buttonArray;
        bool isClicked = false;
        Button btnSelected = new Button();


        public frmMain()
        {
            InitializeComponent();
            buttonArray = new ButtonArray(this);

            this.MouseDown += new  MouseEventHandler(frmMain_MouseDown);
            buttonArray.SelectedButton += new
                SendSelectedButton(buttonArray_SelectedButton);
        }

        private void buttonArray_SelectedButton(object sender)
        {
            btnSelected = sender as Button;

        }

        private void frmMain_MouseDown(object sender, MouseEventArgs e)
        {
            if (isClicked)
            {
                buttonArray.AddButton(e.X, e.Y);
                this.Cursor = Cursors.Default;
                isClicked = false;
            }
        }

        private void tsButton_Click(object sender, EventArgs e)
        {
            isClicked = true;
            this.Cursor = Cursors.Cross;
        }

        private void tsDelete_Click(object sender, EventArgs e)
        {
            buttonArray.RemoveButton(btnSelected.Tag.ToString());
        }


    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace ManageControls
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmMain());
        }
    }
}

and the frmMain.Designer.cs

namespace ManageControls
{
    partial class frmMain
    {
        /// <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.tsMain = new System.Windows.Forms.ToolStrip();
            this.AddButton = new System.Windows.Forms.ToolStripButton();
            this.toolStripButton1 = new System.Windows.Forms.ToolStripSeparator();
            this.RemoveButton = new System.Windows.Forms.ToolStripButton();
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.openLabel1 = new System.Windows.Forms.ToolStripLabel();
            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
            this.saveLabel2 = new System.Windows.Forms.ToolStripLabel();
            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
            this.tsMain.SuspendLayout();
            this.SuspendLayout();
            // 
            // tsMain
            // 
            this.tsMa开发者_如何学Goin.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.AddButton,
            this.toolStripButton1,
            this.RemoveButton,
            this.toolStripSeparator1,
            this.openLabel1,
            this.toolStripSeparator2,
            this.saveLabel2,
            this.toolStripSeparator3});
            this.tsMain.Location = new System.Drawing.Point(0, 0);
            this.tsMain.Name = "tsMain";
            this.tsMain.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
            this.tsMain.Size = new System.Drawing.Size(740, 25);
            this.tsMain.TabIndex = 0;
            this.tsMain.Text = "toolStrip1";
            // 
            // AddButton
            // 
            this.AddButton.Image = global::ManageControls.Properties.Resources.Button;
            this.AddButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
            this.AddButton.ImageTransparentColor = System.Drawing.Color.Magenta;
            this.AddButton.Name = "AddButton";
            this.AddButton.Size = new System.Drawing.Size(63, 22);
            this.AddButton.Text = "Button";
            this.AddButton.Click += new System.EventHandler(this.tsButton_Click);
            // 
            // toolStripButton1
            // 
            this.toolStripButton1.Name = "toolStripButton1";
            this.toolStripButton1.Size = new System.Drawing.Size(6, 25);
            // 
            // RemoveButton
            // 
            this.RemoveButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
            this.RemoveButton.Image = global::ManageControls.Properties.Resources.Delete;
            this.RemoveButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
            this.RemoveButton.ImageTransparentColor = System.Drawing.Color.White;
            this.RemoveButton.Name = "RemoveButton";
            this.RemoveButton.Size = new System.Drawing.Size(57, 22);
            this.RemoveButton.Text = "Delete";
            this.RemoveButton.Click += new System.EventHandler(this.tsDelete_Click);
            // 
            // toolStripSeparator1
            // 
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
            // 
            // openLabel1
            // 
            this.openLabel1.Name = "openLabel1";
            this.openLabel1.Size = new System.Drawing.Size(36, 22);
            this.openLabel1.Text = "Open";
            // 
            // toolStripSeparator2
            // 
            this.toolStripSeparator2.Name = "toolStripSeparator2";
            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
            // 
            // saveLabel2
            // 
            this.saveLabel2.Name = "saveLabel2";
            this.saveLabel2.Size = new System.Drawing.Size(31, 22);
            this.saveLabel2.Text = "Save";
            // 
            // toolStripSeparator3
            // 
            this.toolStripSeparator3.Name = "toolStripSeparator3";
            this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25);
            // 
            // frmMain
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(740, 449);
            this.Controls.Add(this.tsMain);
            this.Name = "frmMain";
            this.Text = "Manage Controls - Sample";
            this.tsMain.ResumeLayout(false);
            this.tsMain.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.ToolStrip tsMain;
        private System.Windows.Forms.ToolStripButton AddButton;
        private System.Windows.Forms.ToolStripButton RemoveButton;
        private System.Windows.Forms.ToolStripSeparator toolStripButton1;
        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
        private System.Windows.Forms.ToolStripLabel openLabel1;
        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
        private System.Windows.Forms.ToolStripLabel saveLabel2;
        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
    }
} 


You don't give much information and i'm not going to download your code. But you can create a class which represents the properties that a button can hold such as position / size / text and serialise a collection of this class. Google .NET serialisation and there are hundreds of links on the topic. You can serialise an array and deserialise it easily from a file to dynamically get back all the buttons, then loop through the deserialised collection and add them back to your form.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜