2010-10-12 31 views
-4

我有这样的代码,允许用户创建一个按钮数组,任何人都可以从一个。 Herehere是我正在做的两个样本(在现在创建一个帐户?单击否,然后下载zip文件)。如何保存控件数组

的问题或问题是如下:

我需要保存用户作出什么都:例如,如果他加入5个按钮并保存,下一次,当他打开保存的文件,他将看到5按钮在同一个地方,他保存它们。 这将允许用户使用相同的程序将文件发送给另一个人,另一个人查看创建的文件。


由于误解(下面的评论),我会发布一些代码与上面的第二个链接。但问题是,我无法找到任何代码来执行我所要求的。大家对于如何开始我都没有任何想法,我的意思是我知道如何从图片框或一些文本保存图片,但按钮阵列是另一回事。

这里是代码简单的例子代码或者你可以下载我发布的第二个文件并编译它。

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()); 
     } 
    } 
} 

和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.tsMain.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; 
    } 
} 
+9

说真的,你期望有人在这里为你做你的工作吗? – 2010-10-12 23:11:50

+0

方式总是有一个像0xa3“仇恨者”......首先感谢编辑的部分,但我不想让任何人为我做这项工作我的项目比它更复杂到目前为止它的约9.42 Mb和我我只是给出了一个72kb的示例代码......但是这是我得到的股票,它像2周搜索没有运气。请不要让这个帖子讨论。我只是在寻求帮助。如果我在这里问错或者在这里问错是错的。 – Bloodsville 2010-10-12 23:20:36

+2

如果你真的需要帮助,打电话给别人姓名并不是一个好主意,特别是如果同一个人真的在你的问题上付出努力是首先可以理解的话。由于您对本网站相当陌生,因此您可以提出具体的编程问题,如果您在询问问题时需要帮助,我建议您阅读http://tinyurl.com/so-hints。 – 2010-10-12 23:24:37

回答

2

您不会提供太多信息,我也不会下载您的代码。但是你可以创建一个代表按钮可以容纳的属性的类,例如位置/大小/文本,并且序列化这个类的集合。 Google .NET序列化并且有数百个关于该主题的链接。您可以序列化一个数组并将其反序列化为一个文件以动态取回所有按钮,然后遍历反序列化的集合并将它们添加回您的表单。

+1

OMG非常感谢你对这个序列化的深入了解BTW我发布了所有提到的代码上面我认为它只是一个复制粘贴去看看它的工作。再次感谢病了读...这个主题它的巨大它会让我忙了一两天。 – Bloodsville 2010-10-13 00:17:14