управление изображением с помощью радиокнопок - PullRequest
0 голосов
/ 28 января 2011

Мне нужен элемент управления, который может содержать изображение и две кнопки-переключатели, например, тот, который мы имеем при загрузке изображений в fb / orkut. 1. Изображение 2. Удалить переключатель. 3. Радиокнопка Cover. [Сделать это изображение обложкой альбома]

Я создал пользовательский элемент управления с этими тремя вещами. На моей странице aspx по нажатию кнопки мне нужно добавить этот пользовательский элемент управления. Значит, пользователь будет выбирать изображение с помощью FileUpload, и когда он нажимает на кнопку, этот пользовательский элемент управления должен быть загружен. Я могу загрузить контроль. Проверьте следующий код.

<code><code>
<pre lang="cs">
protected void btnAddURL_Click(object sender, EventArgs e)
{

  if (FileUpload1.HasFile)
   {
//ItemList is an array list used to store the filename.
        ItemList.Add(FileUpload1.FileName);
        showImage();
    }
    }
публичный void showImage () { PlaceHolder p = новый PlaceHolder (); // Создать эскиз FileUpload1.SaveAs (@ "D: \ ASP \ Project_Dec_16 \ RealEstate \ SaveImage \" + FileUpload1.FileName); System.Drawing.Image img1 = System.Drawing.Image.FromFile (@ "D: \ ASP \ Project_Dec_16 \ RealEstate \ SaveImage \" + FileUpload1.FileName); System.Drawing.Image bmp2 = img1.GetThumbnailImage (100, 100, null, IntPtr.Zero); bmp2.Save (@ "D: \ ASP \ Project_Dec_16 \ RealEstate \ SaveImage \ thumbnail \ L \" + FileUpload1.FileName); // Загружаем изображения, выбранные пользователем for (int i = 0; i & lt; = ItemList.Count - 1; i ++) { Control MyUserControl; // Загружаем пользовательский элемент управления динамически MyUserControl = LoadControl (& quot; MyControl.ascx & quot;); MyUserControl.ID = & quot; MyUserControl & quot; + cnt ++; // Назначаем URL Image MyImage = (Image) MyUserControl.FindControl ("Image1"); // MyImage.ID = "Image" + cnt; MyImage.ImageUrl = "~ / SaveImage / thumbnail / L /" + ItemList [i] .ToString (); // Добавить элемент управления на панель. p.Controls.Add (MyUserControl); Panel2.Controls.Add (р);

Проблема: 1> Все изображения приходят на новую строку, я хочу, чтобы они были рядом друг с другом. 2> Как определить, какая радио-кнопка нажата, так как у меня более одного изображения, и у всех есть радио-кнопки. 3> Как захватить щелчок переключателя со страницы aspx? 4> Если есть другой способ добиться этого, дайте мне знать.

Искал в Google, но не смог найти решение для этого. :( Заранее спасибо.

[Код после изменений] в файле ascx я добавил следующий код

 public event EventHandler rd_ClickDemo;

 protected void deleteimage_CheckedChanged(object sender, EventArgs e)
    {
        rd_ClickDemo(sender, e);
    }
    protected void setascover_CheckedChanged(object sender, EventArgs e)
    {
        rd_ClickDemo(sender, e);
    }

In aspx file on click of a button i am doing the following.

 protected void btnAddURL_Click(object sender, EventArgs e)
    {

        if (FileUpload1.HasFile)
        {
           // Add file name to array list
            ItemList.Add(FileUpload1.FileName);

          //Add The URL in a text box.
            txtAddURL.Text = txtAddURL.Text + System.Environment.NewLine + System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName);
            //Image1.ImageUrl = System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName);        
            //this.Button1_Click(this, e);  

            showImage();
        }
    }

public void showImage()
{

        PlaceHolder p = new PlaceHolder();

// Create a Thumbnail Image.
        FileUpload1.SaveAs(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\" + FileUpload1.FileName);
        System.Drawing.Image img1 = System.Drawing.Image.FromFile(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\" + FileUpload1.FileName);
        System.Drawing.Image bmp2 = img1.GetThumbnailImage(100, 100, null, IntPtr.Zero);
        bmp2.Save(@"D:\ASP\Project_Dec_16\RealEstate\SaveImage\thumbnail\L\" + FileUpload1.FileName);

//Load all images from array list.
        for (int i = 0; i <= ItemList.Count - 1; i++)
        {

            // Load user control dynamically
            MyUserControl = LoadControl("MyControl.ascx");

            MyUserControl.ID = "MyUserControl" + cnt++;

          // Find Radio Button
            RadioButton rdb1 = (RadioButton)MyUserControl.FindControl("deleteimage");
            RadioButton rdb2 = (RadioButton)MyUserControl.FindControl("setascover");

            //Attach Group Name.
            rdb1.GroupName = "G1" + cnt.ToString();
            rdb1.ID = "Rb_ID_D" + cnt.ToString();
            rdb1.AutoPostBack = true;
            rdb1.CheckedChanged +=new EventHandler(rdb1_CheckedChanged);

            //Attach Group Name.
            rdb2.GroupName = "G1"+ cnt.ToString();
            rdb2.ID = "Rb_ID" + cnt.ToString();
            rdb2.AutoPostBack = true;
            rdb2.CheckedChanged += new EventHandler(rdb1_CheckedChanged);
            //Image MyImage = (Image)MyUserControl.FindControl("Image1");
            // MyImage.ID = "Image" + cnt;

            //Attach URL to Image.
            Image MyImage = (Image)MyUserControl.FindControl("Image1");
            MyImage.ImageUrl = "~/SaveImage/thumbnail/L/" + ItemList[i].ToString();
            p.Controls.Add(MyUserControl);
            Panel2.Controls.Add(p);
       }
}

Тем не менее, я не могу вызвать событие radiobutton_CheckedChanged. Пожалуйста, помогите.

1 Ответ

1 голос
/ 28 января 2011

Хорошо, вот ваше решение для первой проблемы:

1> Все изображения выходят на новую строку, я хочу, чтобы они были рядом друг с другом.Ответ: Вы можете сделать это в CSS блока div вашего пользовательского элемента управления, просто установите значение float влево следующим образом:

style="display:block;float:right;"

2> Как определить, какая радио-кнопка нажата, так как у меня более одного изображения,и у всех есть радио кнопки.Ответ: Вы можете получить элемент управления, на котором размещается ваш RadioButton, чтобы вы могли использовать свойство NamingContainer кнопки «Радио» для получения элемента управления хостингом, который в вашем случае должен быть вашим пользовательским элементом управления.

3> Как захватить щелчокрадио кнопка со страницы aspx?Ответ: Выполните следующие действия в своем коде:

сначала при цикле добавления Пользовательского элемента управления на Panel2 присоедините имя группы и обработчик событий к RadioButton.(Предполагая, что у вас уже есть свои переключатели в вашем пользовательском элементе управления), а затем обработайте событие CheckedChanged (я использую анонимный делегат для обработки события)

RadioButton rdb1 = (RadioButton)MyUserControl.FindControl("deleteimage");
RadioButton rdb2 = (RadioButton)MyUserControl.FindControl("setascover");

rd1.GrouprdoSelect2.GroupName = "radiobutton" + i.ToString() ;
rd1.ID = "radiobutton" + i.ToString() + i.ToString() + Convert.ToString(1);
rd1.AutoPostBack = true;
rd1.CheckedChanged += (thesender, ev) => {
       RadioButton rb =  (RadioButton) thesender;
       MyUserControl mcl = rb.NamingContainer as MyUserControl;
       //Perform your task based on the fact of mcl.ID
   }

rd2.GrouprdoSelect2.GroupName = "radiobutton" + i.ToString() ;
rd2.ID = "radiobutton" + i.ToString() + i.ToString() + Convert.ToString(2);
rd2.AutoPostBack = true;
rd2.CheckedChanged += (thesender, ev) => {
       RadioButton rb =  (RadioButton) thesender;
       MyUserControl mcl = rb.NamingContainer as MyUserControl;
       //Perform your task based on the fact of mcl.ID
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...