Asp.net 2.0 中的TreeView的右键菜单(Context Menus on the TReeView - IE Specific)
Posted on 2008-08-19 15:38 codingsilence 阅读(496) 评论(0) 编辑 收藏 举报A few ASP.NET 2.0 TreeView coders were asking for a how to have context menus - per node - on the TreeView control. Well I spent a small amount of time on this and wanted to post one solution. A few caveats:
a. IE Specific
b. I never optimized the javascript to use parameters
Hope this helps soeone achieve what they need. If you find a better solution please feel free to let me know!
<%@ Page Language="C#" %>
<html>
<head>
<style>
<!--
.skin1 {
cursor:default;
font:menutext;
position:absolute;
text-align:left;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
width:120px;
background-color:menu;
border:1 solid buttonface;
visibility:hidden;
border:2 outset buttonhighlight;
}
.menuitems {
padding-left:15px;
padding-right:10px;
}
-->
</style>
<script type="text/javascript">
<!-- Begin
var menuskin = "skin1";
var display_url = 1; // Show URLs in status bar?
function showmenuie5() {
if (event.srcElement.type != undefined)
{
var s = event.srcElement.id;
var ind = s.replace("TreeView1t", "");
s = s.replace("TreeView1t", "TreeView1n");
document.getElementById('one').url = event.srcElement.href;
document.getElementById('one').innerText = "Select";
var ch = document.getElementById(s);
if (ch != null){
document.getElementById('two').url = "javascript:TreeView_ToggleNode(TreeView1_Data," + ind + "," + s + ",' '," + s + "Nodes)";
document.getElementById('two').innerText = "Expand\\Collapse";
}
else
document.getElementById('two').outerHTML="<div id=two class=menuitems url=''></div>"
var rightedge = document.body.clientWidth-event.clientX;
var bottomedge = document.body.clientHeight-event.clientY;
if (rightedge < ie5menu.offsetWidth)
ie5menu.style.left = document.body.scrollLeft + event.clientX - ie5menu.offsetWidth;
else
ie5menu.style.left = document.body.scrollLeft + event.clientX;
if (bottomedge < ie5menu.offsetHeight)
ie5menu.style.top = document.body.scrollTop + event.clientY - ie5menu.offsetHeight;
else
ie5menu.style.top = document.body.scrollTop + event.clientY;
ie5menu.style.visibility = "visible";
}
else
{
ie5menu.style.visibility = "hidden";
}
return false;
}
function hidemenuie5() {
ie5menu.style.visibility = "hidden";
}
function highlightie5() {
if (event.srcElement.className == "menuitems") {
event.srcElement.style.backgroundColor = "highlight";
event.srcElement.style.color = "white";
if (display_url)
window.status = event.srcElement.url;
}
}
function lowlightie5() {
if (event.srcElement.className == "menuitems") {
event.srcElement.style.backgroundColor = "";
event.srcElement.style.color = "black";
window.status = "";
}
}
function jumptoie5() {
if (event.srcElement.className == "menuitems") {
if (event.srcElement.getAttribute("target") != null)
window.open(event.srcElement.url, event.srcElement.getAttribute("target"));
else
window.location = event.srcElement.url;
}
}
// End -->
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ie5menu" class="skin0" onmouseover="highlightie5()" onmouseout="lowlightie5()"
onclick="jumptoie5();">
<div id="one" class="menuitems" url="">
</div>
<div id="two" class="menuitems" url="">
</div>
</div>
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="a" Value="a">
<asp:TreeNode Text="b" Value="b">
<asp:TreeNode Text="c" Value="c"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="cc" Value="cc">
<asp:TreeNode Text="ccc" Value="ccc">
<asp:TreeNode Text="cccc" Value="cccc"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
<SelectedNodeStyle BackColor="#C00000" />
</asp:TreeView>
</form>
<script type="text/javascript">
if (document.all) {
ie5menu.className = menuskin;
document.getElementById('TreeView1').oncontextmenu = showmenuie5;
document.body.onclick = hidemenuie5;
}
</script>
</body>
</html>
<html>
<head>
<style>
<!--
.skin1 {
cursor:default;
font:menutext;
position:absolute;
text-align:left;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
width:120px;
background-color:menu;
border:1 solid buttonface;
visibility:hidden;
border:2 outset buttonhighlight;
}
.menuitems {
padding-left:15px;
padding-right:10px;
}
-->
</style>
<script type="text/javascript">
<!-- Begin
var menuskin = "skin1";
var display_url = 1; // Show URLs in status bar?
function showmenuie5() {
if (event.srcElement.type != undefined)
{
var s = event.srcElement.id;
var ind = s.replace("TreeView1t", "");
s = s.replace("TreeView1t", "TreeView1n");
document.getElementById('one').url = event.srcElement.href;
document.getElementById('one').innerText = "Select";
var ch = document.getElementById(s);
if (ch != null){
document.getElementById('two').url = "javascript:TreeView_ToggleNode(TreeView1_Data," + ind + "," + s + ",' '," + s + "Nodes)";
document.getElementById('two').innerText = "Expand\\Collapse";
}
else
document.getElementById('two').outerHTML="<div id=two class=menuitems url=''></div>"
var rightedge = document.body.clientWidth-event.clientX;
var bottomedge = document.body.clientHeight-event.clientY;
if (rightedge < ie5menu.offsetWidth)
ie5menu.style.left = document.body.scrollLeft + event.clientX - ie5menu.offsetWidth;
else
ie5menu.style.left = document.body.scrollLeft + event.clientX;
if (bottomedge < ie5menu.offsetHeight)
ie5menu.style.top = document.body.scrollTop + event.clientY - ie5menu.offsetHeight;
else
ie5menu.style.top = document.body.scrollTop + event.clientY;
ie5menu.style.visibility = "visible";
}
else
{
ie5menu.style.visibility = "hidden";
}
return false;
}
function hidemenuie5() {
ie5menu.style.visibility = "hidden";
}
function highlightie5() {
if (event.srcElement.className == "menuitems") {
event.srcElement.style.backgroundColor = "highlight";
event.srcElement.style.color = "white";
if (display_url)
window.status = event.srcElement.url;
}
}
function lowlightie5() {
if (event.srcElement.className == "menuitems") {
event.srcElement.style.backgroundColor = "";
event.srcElement.style.color = "black";
window.status = "";
}
}
function jumptoie5() {
if (event.srcElement.className == "menuitems") {
if (event.srcElement.getAttribute("target") != null)
window.open(event.srcElement.url, event.srcElement.getAttribute("target"));
else
window.location = event.srcElement.url;
}
}
// End -->
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="ie5menu" class="skin0" onmouseover="highlightie5()" onmouseout="lowlightie5()"
onclick="jumptoie5();">
<div id="one" class="menuitems" url="">
</div>
<div id="two" class="menuitems" url="">
</div>
</div>
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="a" Value="a">
<asp:TreeNode Text="b" Value="b">
<asp:TreeNode Text="c" Value="c"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="cc" Value="cc">
<asp:TreeNode Text="ccc" Value="ccc">
<asp:TreeNode Text="cccc" Value="cccc"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
<SelectedNodeStyle BackColor="#C00000" />
</asp:TreeView>
</form>
<script type="text/javascript">
if (document.all) {
ie5menu.className = menuskin;
document.getElementById('TreeView1').oncontextmenu = showmenuie5;
document.body.onclick = hidemenuie5;
}
</script>
</body>
</html>