2013-10-25 3 views
1

Я просто создаю приложение в приложении C# Windows Forms for Book Store Процесс, который я делаю здесь, это
1.Inserting Введите имя книги и запишите ее в базу данных.
2. Теперь мне нужно получить, как на изображении, в формы, но все должно быть динамически создано как
, если у меня есть две книги, эта панель с изображением, кнопка и этот учебник должны быть созданы, а значения должны быть там показаны.
Если у меня есть три entereids в БД, необходимо создать три окна с картинками, кнопку и этот учебник, а значения должны быть указаны там в форме.
есть ли способ решить эту проблему вне ..

Динамическое создание элементов управления в C# Формы Windows

нужно создать эти элементы управления динамически в соответствии с «п» количество строк в базе данных

Для большей ясности по поводу моего вопроса см изображение

enter image description here

ответ

1

Создать пользовательский элемент управления, что Конта вставьте изображение, текстовое поле и кнопку. Итерируйте по списку записей, полученных из базы данных, и создайте новый экземпляр пользовательского элемента управления для каждого элемента. Добавьте элементы управления пользователя в коллекцию Controls родительского элемента управления.

+0

Возможно ли, что мы можем получить все поле в одной строке в соответствующие места .. то есть мне нужно создать 100 из них, если значения 100 в db @Lost – coolprarun

1

Вы можете достичь этого, используя контроль представления списка:

вы можете получить более подробную информацию об этом:

http://www.dotnetperls.com/listview

http://www.c-sharpcorner.com/UploadFile/9a3ae2/using-listview-control-windows-form-application3/

http://www.java2s.com/Code/CSharp/GUI-Windows-Form/ListViewExample.htm

Я надеюсь, что это поможет .,. :)

+0

возможно, что мы можем получить все поле в одной строке в соответствующие места .. то есть мне нужно создать 100 из них, если значения равны 100 в дБ. bcoz вышесказанное создано вручную для всех элементов управления, которые мне нужны динамически @hitesh – coolprarun

+0

Вы хотите иметь все данные из базы данных и показать на форме .. ?? –

+0

s s что я упомянул в вопросе .. есть ли способ решить это .. @Hitesh .. – coolprarun

1

Это просто, чтобы достичь того, чего вы хотите. Вам просто нужно создать UserControl для каждой книги или Panel в порядке. Я расскажу вам об использовании Panel. Что-то вроде этого:

public class BookPanel : Panel 
{ 
    public string BookName 
    { 
     get { return text.Text; } 
     set { text.Text = value; } 
    } 
    public Image BookCover 
    { 
     get { return pic.Image; } 
     set { pic.Image = value; } 
    } 
    public event EventHandler BuyBook; 
    public string BuyButtonText 
    { 
     get { return button.Text; } 
     set { button.Text = value; } 
    }   
    //inner child controls 
    PictureBox pic = new PictureBox(); 
    TextBox text = new TextBox(); 
    Button button = new Button(); 
    public BookPanel() 
    { 
     pic.Parent = text.Parent = button.Parent = this; 
     pic.Top = 5; 
     text.Left = pic.Left = 5; 
     button.Text = "Buy"; 
     button.Width = 50; 
     button.Anchor = AnchorStyles.Right | AnchorStyles.Bottom; 
     text.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right; 
     pic.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; 
     pic.SizeMode = PictureBoxSizeMode.StretchImage; 
     button.Click += (s, e) => 
     { 
      EventHandler handler = BuyBook; 
      if (handler != null) handler(this, EventArgs.Empty); 
     }; 
    } 
    bool init; 
    protected override void OnSizeChanged(EventArgs e) 
    {    
     base.OnSizeChanged(e); 
     if (!init) 
     { 
      text.Width = Width - button.Width - 12; 
      button.Left = text.Right + 5; 
      pic.Height = Height - 35; 
      pic.Width = Width - 10; 
      text.Top = pic.Bottom + 5; 
      button.Top = text.Top - 2; 
      init = true; 
     } 
    } 
} 

//Usage 
bookPanel1.BookCover = yourImage; 
//Try this to see how the Buy button works 
bookPanel1.BuyBook += (s, e) => { 
    MessageBox.Show(bookPanel1.BookName); 
}; 

ПРИМЕЧАНИЕ: Код выше не полный, вы не имеете полную возможность настроить внешний вид вашего TextBox, Button and PictureBox, однако вы можете добавить код, чтобы сделать так, код немного. Я думаю, что для простого контроля это достаточно. Вы также должны обратить внимание на использование имущества Dock, объектов Margin и Padding и других элементов управления макета и контейнера, таких как Panel, FlowLayoutPanel, TableLayoutPanel, чтобы настроить собственный контроль.

Чтобы использовать его в FlowLayoutPanel, попробуйте этот код:

flowLayoutPanel1.AutoScroll = true; 
for (int i = 0; i < 100; i++) { 
    new BookPanel { 
       Parent = flowLayoutPanel1, 
       Width = 150, 
       Height = 200, 
       BorderStyle = BorderStyle.FixedSingle, 
       BookCover = yourImageList[i] 
    }.BuyBook += buyBook; 
} 
private void buyBook(object sender, EventArgs e){ 
    BookPanel book = sender as BookPanel; 
    //your code goes here .... 
} 
+0

Ok +1 для быстрого решения. Я попробую и скажу u – coolprarun

1
  1. Используйте UserControl для построения пользовательского элемента управления (изображение, текстовое поле, кнопка) (http://msdn.microsoft.com/en-us/library/aa302342.aspx)
  2. Используйте FlowLayoutPanel или TableLayoutPanel к добавьте элементы управления в свою форму.

Создать проект Winforms и добавить этот файл:

CtrlBuyBook.cs

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace UserControls 
{ 
    public class CtrlBuyBook : UserControl 
    { 
     public int BookID { get; set; } 

     public int Quantity 
     { 
      get { return (int)nudQuantity.Value; } 
      set { nudQuantity.Value = value; } 
     } 

     public Image Cover 
     { 
      set { picCover.Image = value; } 
     } 

     public CtrlBuyBook() 
     { 
      InitializeComponent(); 
     } 

     private void btnBuy_Click(object sender, System.EventArgs e) 
     { 
      OnBuyBook(EventArgs.Empty); 
     } 

     public event EventHandler<EventArgs> BuyBook; 
     private void OnBuyBook(EventArgs e) 
     { 
      var handler = BuyBook; 
      if (handler != null) 
      { 
       handler(this, e); 
      } 
     } 

     private System.ComponentModel.IContainer components = null; 
     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     private void InitializeComponent() 
     { 
      this.picCover = new System.Windows.Forms.PictureBox(); 
      this.btnBuy = new System.Windows.Forms.Button(); 
      this.nudQuantity = new System.Windows.Forms.NumericUpDown(); 
      ((System.ComponentModel.ISupportInitialize)(this.picCover)).BeginInit(); 
      ((System.ComponentModel.ISupportInitialize)(this.nudQuantity)).BeginInit(); 
      this.SuspendLayout(); 
      this.picCover.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
     | System.Windows.Forms.AnchorStyles.Left) 
     | System.Windows.Forms.AnchorStyles.Right))); 
      this.picCover.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 
      this.picCover.Location = new System.Drawing.Point(4, 4); 
      this.picCover.Name = "picCover"; 
      this.picCover.Size = new System.Drawing.Size(143, 167); 
      this.picCover.TabIndex = 0; 
      this.picCover.TabStop = false; 

      this.btnBuy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 
      this.btnBuy.Location = new System.Drawing.Point(95, 177); 
      this.btnBuy.Name = "btnBuy"; 
      this.btnBuy.Size = new System.Drawing.Size(52, 20); 
      this.btnBuy.TabIndex = 2; 
      this.btnBuy.Text = "Buy"; 
      this.btnBuy.UseVisualStyleBackColor = true; 
      this.btnBuy.Click += new System.EventHandler(this.btnBuy_Click); 

      this.nudQuantity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
     | System.Windows.Forms.AnchorStyles.Right))); 
      this.nudQuantity.Location = new System.Drawing.Point(4, 177); 
      this.nudQuantity.Name = "nudQuantity"; 
      this.nudQuantity.Size = new System.Drawing.Size(85, 20); 
      this.nudQuantity.TabIndex = 3; 

      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.Controls.Add(this.nudQuantity); 
      this.Controls.Add(this.btnBuy); 
      this.Controls.Add(this.picCover); 
      this.Name = "ctrlBuyBook"; 
      this.Size = new System.Drawing.Size(150, 200); 
      ((System.ComponentModel.ISupportInitialize)(this.picCover)).EndInit(); 
      ((System.ComponentModel.ISupportInitialize)(this.nudQuantity)).EndInit(); 
      this.ResumeLayout(false); 
     } 
     private System.Windows.Forms.PictureBox picCover; 
     private System.Windows.Forms.Button btnBuy; 
     private System.Windows.Forms.NumericUpDown nudQuantity; 
    } 
} 

Следующая добавить FlowLayoutPanel и кнопки на форме. В коде формы в начале добавить следующее:

private int _bookCount = 0; 

Тогда на события нажатия кнопки Добавить следующий код:

var control = new CtrlBuyBook(); 
control.BookID = ++_bookCount; 
control.Cover = null; 
control.Quantity = 1; 
control.BuyBook += new EventHandler<EventArgs>(control_BuyBook); 
flpPanel.Controls.Add(control); 

И, наконец, метод BuyBook события пользовательского элемента управления:

private void control_BuyBook(object sender, EventArgs e) 
{ 
    var control = (CtrlBuyBook)sender; 
    MessageBox.Show(string.Format("Customer wants to buy book with ID: {0}. Quantity: {1}", control.BookID, control.Quantity)); 
} 

Все, что вам нужно, - это получить ваши книги из БД и отобразить на форме и обработать событие BuyBook из User Control. Вот и все.

+0

Я думаю, что книга, которую он хочет продать, это своего рода «электронная книга», поэтому 'количество' не имеет значения. –

+0

Это не было включено в спецификацию :) – MrK

+0

Да Количество не важно, только для меня нужны только требуемые значения .. @MrK – coolprarun

Смежные вопросы