Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
UserControl удаляет все остальные контролы.
|
|||
|---|---|---|---|
|
#18+
Делаю 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 17:24 |
|
||
|
|

start [/forum/topic.php?fid=18&tid=1387410]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 381ms |

| 0 / 0 |
