powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / UserControl удаляет все остальные контролы.
2 сообщений из 2, страница 1 из 1
UserControl удаляет все остальные контролы.
    #34141722
timurka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю UserControl, который бы добавлял к любому контролу на странице свойство oncontextmenu.
Вот код:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.IO;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;

public partial class MenuManager: System.Web.UI.UserControl
{
    List<WebControl> m_controls = new List<WebControl>();
    List<string> m_scripts = new List<string>();
    string m_divPath = string.Empty;
    string m_scriptPath = string.Empty;
    public List<string> Scripts
    {
        get{return m_scripts;}
        set{m_scripts = value;}
    }
    public List<WebControl> controls
    {
        get { return m_controls; }
        set { m_controls = value; }
    }
    public string ScriptPath 
    {
        get { return m_scriptPath; }
        set { m_scriptPath = value; }
    }
    public string DivPath 
    {
        get { return m_divPath; }
        set { m_divPath = value; }
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected override void Render(HtmlTextWriter writer)
    {
        try
        {
            int i = 0;
            while (i < controls.Count)
            {
                WebControl control = controls[i];
                control.Attributes.Add("oncontextmenu", Scripts[i] + " return false;");
                i++;
            }
            #region Добавляем скрипт в страницу.
            writer.Write("<script language=\"JavaScript\" type=\"text\\JavaScript\">");
            StreamReader reader = new StreamReader(ScriptPath);
            if (!reader.BaseStream.CanRead)
            {
                throw new Exception("Can't read from stream!");
            }
            char[] buffer = new char[reader.BaseStream.Length];
            reader.Read(buffer, 0, (int)reader.BaseStream.Length);
            writer.Write(buffer);
            writer.Write("</script>");
            reader = new StreamReader(DivPath);
            if (!reader.BaseStream.CanRead)
            {
                throw new Exception("Can't read from stream!");
            }
            buffer = new char[reader.BaseStream.Length];
            reader.Read(buffer, 0, (int)reader.BaseStream.Length);
            writer.Write(buffer);
            foreach (Control control in controls) 
            {
                control.RenderControl(writer);
            }
            #endregion
        }
        catch (Exception)
        {
            throw;
        }
    }
}
Смысл кода:Добавляется новый контрол:MenuManager1в его свойство Controls добавляются контролы, контекстные меню которых нужно заменить, в свойство Scripts добавляются имена функции, которые соответствуют каждому контролу (соответствие Controls[i] к Scripts[i]).Устанавливается свойство ScriptPath = имя файла, в котором находятся JavaScript's, DivPath = имя файла, в котором находятся Div'ы для каждого контекстного меню.Метод Render пишет в HTML - код страницы эти файлы и добавляет свойства каждому контролу.Собственно проблема:В конечном итоге у меня на странице есть только мой UserControl, а остальные каким-то мистическим образом пропадают...
Вот код aspx-страницы:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <uc2:MenuManager ID="MenuManager1" runat="server" />
        <asp:ListBox ID="ListBox1" runat="server" Height="405px" Width="183px"></asp:ListBox>
    </form>
</body>
</html>
Вот C# код странцы:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using C1.Web.Command;

public partial class userlist : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MenuManager1.Controls.Add(ListBox1);
        MenuManager1.Scripts.Add("ShowPopup();");
        MenuManager1.ScriptPath = "scripts.js";
        MenuManager1.DivPath = "divs.div";
    }
}
Файл scripts.js:
<!--
   var mWidth = 250;
   var mHeight = 70;
   var winPopup = window.createPopup();
   function showPopup()
   {
    var winPopupBody = winPopup.document.body;
    
    winPopupBody.innerHTML = winContext.innerHTML;
    winPopup.show(event.offsetX, event.offsetY, mWidth, mHeight, document.body);
    document.body.onmouseup = closePopup;
   }
   
   function closePopup()
   {
    winPopup.hide();
   }
   
  //-->
Файл divs.div
<div id=winContext style="DISPLAY: none">  
    <div id="cells">
    <div onmouseover="this.style.background='#ffffff'" style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: white 1px solid; PADDING-LEFT:
    10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; BACKGROUND: #cccccc; LEFT: 0px; PADDING-BOTTOM: 2px; BORDER-LEFT: white 1px solid; CURSOR: hand; COLOR: black;
    PADDING-TOP: 2px; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana; POSITION: relative; TOP: 0px; HEIGHT: 20px"
    onclick="parent.oIframe.location.href='http://search.microsoft.com';" onmouseout="this.style.background='#cccccc'">
        Главная страница
    </div>

    <div onmouseover="this.style.background='#ffffff'" style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: white 1px solid; PADDING-LEFT:
    10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; BACKGROUND: #cccccc; LEFT: 0px; PADDING-BOTTOM: 2px; BORDER-LEFT: white 1px solid; CURSOR: hand; COLOR: black;
    PADDING-TOP: 2px; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana; POSITION: relative; TOP: 0px; HEIGHT: 20px"
    onclick="parent.oIframe.location.href='http://search.microsoft.com';" onmouseout="this.style.background='#cccccc'">
    Какое-то действие
    </div>
    <div onmouseover="this.style.background='#ffffff'" style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: white 1px solid; PADDING-LEFT:
    10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; BACKGROUND: #cccccc; LEFT: 0px; PADDING-BOTTOM: 2px; BORDER-LEFT: white 1px solid; CURSOR: hand; COLOR: black;
    PADDING-TOP: 2px; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana; POSITION: relative; TOP: 0px; HEIGHT: 20px"
    onclick="parent.oIframe.location.href='http://www.microsoft.com/ie';" onmouseout="this.style.background='#cccccc'">Еще что-то делаем
      </div>

      </div>
 </div>
Вот что получается в итоге:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
    Untitled Page
</title></head>
<body>
    <form name="form1" method="post" action="userlist.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc1ODE1NTA4NWRkGbA1vtj3asNISL4a215fisV+hOM=" />
</div>

        <script language="JavaScript" type="text\JavaScript"><!--
   var mWidth = 250;
   var mHeight = 70;
   var winPopup = window.createPopup();
   function showPopup()
   {
    var winPopupBody = winPopup.document.body;
    
    winPopupBody.innerHTML = winContext.innerHTML;
    winPopup.show(event.offsetX, event.offsetY, mWidth, mHeight, document.body);
    document.body.onmouseup = closePopup;
   }
   
   function closePopup()
   {
    winPopup.hide();
   }
   
  //--></script><div id=winContext style="DISPLAY: none">  
    <div id="cells">
    <div onmouseover="this.style.background='#ffffff'" style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: white 1px solid; PADDING-LEFT:
    10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; BACKGROUND: #cccccc; LEFT: 0px; PADDING-BOTTOM: 2px; BORDER-LEFT: white 1px solid; CURSOR: hand; COLOR: black;
    PADDING-TOP: 2px; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana; POSITION: relative; TOP: 0px; HEIGHT: 20px"
    onclick="parent.oIframe.location.href='http://search.microsoft.com';" onmouseout="this.style.background='#cccccc'">
         
    </div>

    <div onmouseover="this.style.background='#ffffff'" style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: white 1px solid; PADDING-LEFT:
    10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; BACKGROUND: #cccccc; LEFT: 0px; PADDING-BOTTOM: 2px; BORDER-LEFT: white 1px solid; CURSOR: hand; COLOR: black;
    PADDING-TOP: 2px; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana; POSITION: relative; TOP: 0px; HEIGHT: 20px"
    onclick="parent.oIframe.location.href='http://search.microsoft.com';" onmouseout="this.style.background='#cccccc'">
    - 
    </div>
    <div onmouseover="this.style.background='#ffffff'" style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: white 1px solid; PADDING-LEFT:
    10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; BACKGROUND: #cccccc; LEFT: 0px; PADDING-BOTTOM: 2px; BORDER-LEFT: white 1px solid; CURSOR: hand; COLOR: black;
    PADDING-TOP: 2px; BORDER-BOTTOM: black 1px solid; FONT-FAMILY: verdana; POSITION: relative; TOP: 0px; HEIGHT: 20px"
    onclick="parent.oIframe.location.href='http://www.microsoft.com/ie';" onmouseout="this.style.background='#cccccc'"> - 
      </div>

      </div>
 </div>                                            
        
    </form>
</body>
</html>

Куда деваецца грёбаный ListBox1?
...
Рейтинг: 0 / 0
UserControl удаляет все остальные контролы.
    #34141868
timurka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос отпал сам собой...
Я неправильно использовал controls и Controls...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / UserControl удаляет все остальные контролы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]