Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как создать массив имиджей динамически в C#?


Автор: passs 12.2.2004, 17:08
Привет все!

Подскажите, плиз, как динамически создать массив объектов, точнее объекты массива?

Я все никак правильно не могу синтаксис написать, а может вообще все пишу не правильно:
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button butAdd;
System.Web.UI.WebControls.Image[] myImage;// = new System.Web.UI.WebControls.Image;
int yCount = 0;
int iCount = 0;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
yCount = 150;
iCount = 0;
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.butAdd.Click += new System.EventHandler(this.butAdd_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void butAdd_Click(object sender, System.EventArgs e)
{
//
//this.myImage.
myImage[] = new myImage[1];
myImage.Style["Left"] = "150";
myImage.Style["Top"] = yCount.ToString();
yCount = yCount + 20;
myImage.Style["Z-INDEX"] = "112";
myImage.Style["POSITION"] = "absolute";
Page.Controls.Add(myImage);
iCount++;
}
}

вот это то, что не работает:-)

Если кто знает, подскажите, плиз, буду очень благодарен!

С уважением,
Александр

Автор: AntonSaburov 12.2.2004, 18:41
Отвечаю несколько обще, но это общеупотребительная практика, так что лучше так IMHO.
Ты сначала должен создать массив ссылок на объекты, а потом еще и сами объекты.

Например, создать на форме пять кнопок
Код

private void button1_Click(object sender, System.EventArgs e)
{
   Button[] btn_list = new Button[5];
   for(int k=0; k<btn_list.Length; k++)
   {
       btn_list[k] = new Button();
       btn_list[k].Top = k*25;
   }
   for(int k=0; k<btn_list.Length; k++)
   {
       this.Controls.Add(btn_list[k]);
   }
}


Автор: Kurt 12.2.2004, 18:57
Цитата(passs @ 12.2.2004, 17:08)

  myImage[] = new myImage[1];
  myImage.Style["Left"] = "150";

Я не сильно разбираюсь в этой части ДотНЕТ (имеется ввиду web..),
но попробуй написать так:
Код

myImage = new System.Web.UI.WebControls.Image[5];  // 5 тут для примера - поставь что хошь..

Т.е. new надо не от объекта, а от типа..
А обращение к элементу массива, даже если в нем тока ОДИН элемент:
Код

myImage[index].Style...  // index - индекс элемента в массиве..


Применительно, к твоему коду:
Код

myImage[] = new System.Web.UI.WebControls.Image[1];
myImage[0].Style["Left"] = "150";  // нумерация с 0..


Похоже?.. smile.gif

Автор: AntonSaburov 13.2.2004, 13:14
Код

myImage[] = new System.Web.UI.WebControls.Image[1];
myImage[0].Style["Left"] = "150";  // нумерация с 0..

Вот тут неверно. Первая строка создает ТОЛЬКО МАССИВ еще НЕИНИЦИАЛИЗИРОВАННЫХ ссылок на Image. Т.е. у тебя уже есть заполненная ссылка на массив из одного элемента. А вот сам элемент все еще является NULL.
И сначала надо создать объект для заполнения элемента массива, и только потом устанавливать у этого элемента свойства.
Код

myImage[] = new System.Web.UI.WebControls.Image[1];
myImage[0] = new System.Web.UI.WebControls.Image(); // Вот это создание !!!
myImage[0].Style["Left"] = "150";  // нумерация с 0..

Автор: Kurt 13.2.2004, 18:53
Неинициализированные ссылки?
Поидее, да.. Вы правы..
Сорри, за ложные сведения.. biggrin.gif
Однако..
Меня смущает такой код:
Код
using System;

class MainClass
{
public static void Main(string[] args)
{
 string[] strArr;
 strArr = new string[10];
 strArr[5] = "Just a string";
 Console.WriteLine(strArr[5]);
}
}


Вроде инициализации нет, хотя string - тоже класс..
Все работает.. confused.gif

Автор: AntonSaburov 16.2.2004, 13:38
Цитата
Вроде инициализации нет

Есть Просто здесь происходит unboxing - по сути любой объект может быть как-бы запакован, а потом распакован. Здесь как раз такое - из строки символов автоматическим приведением получается готовый объект String. И его присваиваем ссылке. Так что здесь все нормально.

Автор: Kurt 16.2.2004, 20:00
Хм..
А с System.Web.UI.WebControls, как я понимаю, так нельзя?
"Автоматически" ничего не создается?..

Автор: AntonSaburov 17.2.2004, 10:37
Цитата
А с System.Web.UI.WebControls, как я понимаю, так нельзя?

Так точно - не создается. Надо все делать ручками.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)