【问题标题】:How to save a Control Array [closed]如何保存控制数组 [关闭]
【发布时间】:2011-04-24 14:23:15
【问题描述】:

我有这段代码允许用户创建一个按钮数组,任何一个都在一个from中。 Herehere 是我正在做的两个示例(在 Create an account now? 点击 NO 然后下载 zip 文件)。

问题如下:

我需要保存用户所做的一切:例如,如果他添加了 5 个按钮并保存了它,那么下次当他打开保存的文件时,他会在保存它们的相同位置看到 5 个按钮。 这将允许用户将文件发送给使用相同程序的另一个人,然后其他人查看创建的文件。


由于误解(下面的cmets),我将发布一些代码,上面的第二个链接。但问题是我找不到任何代码来做我所要求的。伙计们,我什至不知道如何开始,我的意思是我知道如何从图片框或某些文本中保存图像,但按钮数组是另一回事。

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

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


    }
}

程序.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;
    }
} 

【问题讨论】:

  • 说真的,您希望这里有人为您工作吗?
  • 总有一些人喜欢 0xa3 "Haters" ...首先感谢编辑的部分,但我不希望任何人为我的项目工作比这更复杂所以到目前为止,它大约 9.42 Mb,我只是给出了一个 72kb 的示例代码......但这是我有库存,它就像 2 周的搜索没有运气。请不要让这篇文章成为讨论。我只是在寻求帮助。如果我问错了,或者这里问错了对不起。
  • 如果您真的需要帮助,那么称呼别人的名字并不是一个好主意,尤其是如果正是这些人真正努力使您的问题一开始就可以理解。由于您对这个网站还很陌生:SO 是一个提出具体编程问题的地方,如果您在提出问题时需要帮助,我建议您阅读 tinyurl.com/so-hints
  • 好吧,我一开始只是觉得被你冒犯了,但我也很感激你解决了我的问题......无论如何重要的部分正是如此,我找不到任何具体的回答方式我的问题。甚至开始研究它。
  • 如果你想知道你的帖子中有什么神奇的成分会以错误的方式惹恼人们,那就是“我需要代码而不是想法”。这听起来像是,“这是我的编程问题,请不要有人帮我写代码吗?”这不是它的工作原理。向我们展示(请在问题本身中)您尝试过的代码以及未解决的问题。

标签: c# arrays controls save


【解决方案1】:

您没有提供太多信息,我不会下载您的代码。但是您可以创建一个表示按钮可以保存的属性(例如位置/大小/文本)的类,并序列化此类的集合。谷歌 .NET 序列化 并且有数百个关于该主题的链接。您可以序列化一个数组并轻松地从文件中反序列化它以动态取回所有按钮,然后循环遍历反序列化的集合并将它们添加回您的表单。

【讨论】:

  • OMG 非常感谢我对序列化进行了深入研究 BTW 我从上面提到的文件中发布了所有代码,我认为它只是复制粘贴以查看它的工作原理。再次感谢阅读...这个主题很大,它会让我忙一两天。
猜你喜欢
  • 2016-03-23
  • 2022-07-15
  • 1970-01-01
  • 2012-10-02
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多