C#编程实现QQ界面的方法

本文实例讲述了C#编程实现QQ界面的方法。分享给大家供大家参考,具体如下:

步骤:

1.新建一个页面,假如说叫VerticalMenu

2.把html代码copy到html代码区

3.把LoadTopMenu方法copy到cs代码区

4.运行即可

1.html代码

<STYLE type="text/css">
  A:link {}{ COLOR: #000000; FONT-SIZE: 12px; TEXT-DECORATION: none}
  A:visited {}{ COLOR: #000000; FONT-SIZE: 12px; TEXT-DECORATION: none}
  A:hover {}{ COLOR: #006CD9; FONT-SIZE: 12px; TEXT-DECORATION: none}
  BODY {}{ FONT-SIZE: 12px;}
  TD {}{ FONT-SIZE: 12px; line-height: 150%}
</STYLE>
<script language="JavaScript">
<!--
function showitem(id,name)
{
  //打开弹出式页面
  //return ("<span><a href='"+id+"' target=_blank>"+name+"</a></span><br>")
  //在框架中打开
  return ("<span><a href='#' onclick=/"url('"+id+"');/">"+name+"</a></span><br>")
}
function url(id)
{
  var source = document.getElementById('fMain');
  source.src=id;
}
function switchoutlookBar(number)
{
  var i = outlookbar.opentitle;
  outlookbar.opentitle=number;
  var id1,id2,id1b,id2b
  if (number!=i && outlooksmoothstat==0){
    if (number!=-1)
    {
      if (i==-1){
        id2="blankdiv";
        id2b="blankdiv";
      }
      else{
        id2="outlookdiv"+i;
        id2b="outlookdivin"+i;
        document.all("outlooktitle"+i).style.border="1px none navy";
        document.all("outlooktitle"+i).style.background=outlookbar.maincolor;
        document.all("outlooktitle"+i).style.color="#ffffff";
        document.all("outlooktitle"+i).style.textalign="center";
      }
      id1="outlookdiv"+number
      id1b="outlookdivin"+number
      document.all("outlooktitle"+number).style.border="1px none white";
      document.all("outlooktitle"+number).style.background=outlookbar.maincolor; //title
      document.all("outlooktitle"+number).style.color="#ffffff";
      document.all("outlooktitle"+number).style.textalign="center";
      smoothout(id1,id2,id1b,id2b,0);
    }
    else
    {
      document.all("blankdiv").style.display="";
      document.all("blankdiv").sryle.height="100%";
      document.all("outlookdiv"+i).style.display="none";
      document.all("outlookdiv"+i).style.height="0%";
      document.all("outlooktitle"+i).style.border="1px none navy";
      document.all("outlooktitle"+i).style.background=outlookbar.maincolor;
      document.all("outlooktitle"+i).style.color="#ffffff";
      document.all("outlooktitle"+i).style.textalign="center";
    }
  }
}
function smoothout(id1,id2,id1b,id2b,stat)
{
  if(stat==0){
    tempinnertext1=document.all(id1b).innerHTML;
    tempinnertext2=document.all(id2b).innerHTML;
    document.all(id1b).innerHTML="";
    document.all(id2b).innerHTML="";
    outlooksmoothstat=1;
    document.all(id1b).style.overflow="hidden";
    document.all(id2b).style.overflow="hidden";
    document.all(id1).style.height="0%";
    document.all(id1).style.display="";
    setTimeout("smoothout('"+id1+"','"+id2+"','"+id1b+"','"+id2b+"',"+outlookbar.inc+")",outlookbar.timedalay);
  }
  else
  {
    stat+=outlookbar.inc;
    if (stat>100)
      stat=100;
    document.all(id1).style.height=stat+"%";
    document.all(id2).style.height=(100-stat)+"%";
    if (stat<100)
      setTimeout("smoothout('"+id1+"','"+id2+"','"+id1b+"','"+id2b+"',"+stat+")",outlookbar.timedalay);
    else
    {
      document.all(id1b).innerHTML=tempinnertext1;
      document.all(id2b).innerHTML=tempinnertext2;
      outlooksmoothstat=0;
      document.all(id1b).style.overflow="auto";
      document.all(id2).style.display="none";
    }
  }
}
function getOutLine()
{
  outline="<table "+outlookbar.otherclass+">";
  for (i=0;i<(outlookbar.titlelist.length);i++)
  {
    outline+="<tr><td name=outlooktitle"+i+" id=outlooktitle"+i+" ";
    if (i!=outlookbar.opentitle)
      outline+=" nowrap align=center style='cursor:hand;background-color:"+outlookbar.maincolor+";color:#ffffff;height:20;border:1 none navy' ";
    else
      outline+=" nowrap align=center style='cursor:hand;background-color:"+outlookbar.maincolor+";color:white;height:20;border:1 none white' ";
    outline+=outlookbar.titlelist[i].otherclass
    outline+=" onclick='switchoutlookBar("+i+")'><span class=smallFont>";
    outline+=outlookbar.titlelist[i].title+"</span></td></tr>";
    outline+="<tr><td name=outlookdiv"+i+" valign=top align=center id=outlookdiv"+i+" style='width:100%"
    if (i!=outlookbar.opentitle)
      outline+=";display:none;height:0%;";
    else
      outline+=";display:;height:100%;";
    outline+="'><div name=outlookdivin"+i+" id=outlookdivin"+i+" style='overflow:auto;width:100%;height:100%'>";
    for (j=0;j<outlookbar.itemlist[i].length;j++)
      outline+=showitem(outlookbar.itemlist[i][j].key,outlookbar.itemlist[i][j].title);
    outline+="</div></td></tr>"
  }
  outline+="</table>"
  return outline
}
function show()
{
  var outline;
  outline="<div id=outLookBarDiv name=outLookBarDiv style='width=100%;height:100%'>"
  outline+=outlookbar.getOutLine();
  outline+="</div>"
  document.write(outline);
}
function theitem(intitle,instate,inkey)
{
  this.state=instate;
  this.otherclass=" nowrap ";
  this.key=inkey;
  this.title=intitle;
}
function addtitle(intitle)
{
  outlookbar.itemlist[outlookbar.titlelist.length]=new Array();
  outlookbar.titlelist[outlookbar.titlelist.length]=new theitem(intitle,1,0);
  return(outlookbar.titlelist.length-1);
}
function additem(intitle,parentid,inkey)
{
  if (parentid>=0 && parentid<=outlookbar.titlelist.length)
  {
    outlookbar.itemlist[parentid][outlookbar.itemlist[parentid].length]=new theitem(intitle,2,inkey);
    outlookbar.itemlist[parentid][outlookbar.itemlist[parentid].length-1].otherclass=" nowrap align=left style='height:5' ";
    return(outlookbar.itemlist[parentid].length-1);
  }
  else
    additem=-1;
}
function outlook()
{
  this.titlelist=new Array();
  this.itemlist=new Array();
  this.divstyle="style='height:100%;width:100%;overflow:auto' align=center";//可以在这里设置对齐方式
  this.otherclass="border=0 cellspacing='0' cellpadding='0' style='height:100%;width:100%'valign=middle align=center ";
  this.addtitle=addtitle;
  this.additem=additem;
  this.starttitle=-1;
  this.show=show;
  this.getOutLine=getOutLine;
  this.opentitle=this.starttitle;
  this.reflesh=outreflesh;
  this.timedelay=50;
  this.inc=10;
  this.maincolor = "#336699"
}
function outreflesh()
{
  document.all("outLookBarDiv").innerHTML=outlookbar.getOutLine();
}
function locatefold(foldname)
{
  if (foldname=="")
    foldname = outlookbar.titlelist[0].title
  for (var i=0;i<outlookbar.titlelist.length;i++)
  {
    if(foldname==outlookbar.titlelist[i].title)
    {
      outlookbar.starttitle=i;
      outlookbar.opentitle=i;
    }
  }
}
var outlookbar=new outlook();
var tempinnertext1,tempinnertext2,outlooksmoothstat
outlooksmoothstat = 0;
<%=LoadVerticalMenu()%>//从数据库产生垂直菜单
//-->
</script>
<table id="mnuList" style="WIDTH:150px;HEIGHT: 100%" cellspacing="0" cellpadding="0" align="left"
  border="0">
  <tr>
    <td bgcolor="#F0F0E5" id="outLookBarShow" style="HEIGHT: 100%" valign="top" align="middle"
      name="outLookBarShow">
      <script language="JavaScript">
      <!--
      locatefold("")
      outlookbar.show()
      //-->
      </script>
    </td>
  </tr>
</table>

2.cs代码

public class VerticalMenu : System.Web.UI.Page
{
  protected DataRow[] father;
  protected DataRow[] first;
    private void Page_Load(object sender, System.EventArgs e)
    {
      // 模拟QQ菜单
    }
  public static string ConnectionString=System.Configuration .ConfigurationSettings .AppSettings["ConnectionString"];

    GetDataSet#region GetDataSet
    public static DataSet GetDataSet(string sql)
    {
      SqlDataAdapter  sda =new SqlDataAdapter(sql,ConnectionString);
      DataSet ds=new DataSet();
      sda.Fill(ds);
      return ds;
    }
    #endregion
  protected string LoadVerticalMenu()
  {
  string sqlFather="select * from PowerSetting";
  DataSet dsFather=GetDataSet(sqlFather);
  father=dsFather.Tables[0].Select("IsBoot=0","IsBoot");
  string menu="";
  foreach(DataRow drfather in father)
  {
    menu+="var t;";
    menu+="t=outlookbar.addtitle('"+drfather["Description"]+"');";
    first=dsFather.Tables[0].Select("ParentID='"+Convert.ToInt32(drfather["ParentID"])+"' and IsBoot=1","IsBoot");
    foreach(DataRow drfirst in first)
    {
      menu+="outlookbar.additem('"+drfirst["Description"]+"',t,'"+drfirst["Url"]+"');";
    }
  }
  return menu;
  }
    Web Form Designer generated code#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.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion
}

3.数据库脚本

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PowerSetting]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[PowerSetting]
GO
CREATE TABLE [dbo].[PowerSetting] (
  [PowerSettingID] [int] IDENTITY (1, 1) NOT NULL ,      --id
  [ParentID] [int] NOT NULL ,            --父节点id
  [Description] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,  --菜单描述内容
  [Icon] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    --要显示图标
  [Url] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,    --url
  [Target] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    --_self,_blank等
  [CreateByID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,  --创建人id
  [CreateON] [datetime] NULL ,          --创建日期
  [IsEnabled] [bit] NULL ,            --是否可用
  [IsBoot] [int] NULL             --是不是根节点;1是其他不是
) ON [PRIMARY]
GO

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#数据结构与算法教程》、《C#常见控件用法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

(0)

相关推荐

  • C#实现属于自己的QQ截图工具

    下面就具体介绍下实现截图工具的实现思路. 为了让大家更清楚地知道如何去实现自己的截图工具,首先我来描述下截图的一个过程--我们使用QQ的截图工具和Windows 自带的截图工具都可以发现,当我们点击QQ窗体中的截图按钮时,此时我们将看到一个全屏图片,然后我们可以在其上截图,当鼠标左键按下时,即代表开始截图,并我们可以移动鼠标来改变截图的大小,鼠标弹起时即代表结束截图,此时我们可以双击矩形区域完全截图,并且可以通过粘贴操作把截取的图片粘贴到聊天窗口的发送区,鼠标右键点击则是退出截图.这样我们截图的

  • C++获取本机登陆过的QQ号码示例程序

    先看效果图,代码在下面 复制代码 代码如下: // FileName: GetQQ.h #pragma once #include <vector> class GetQQ{private:    std::vector<CString> m_qqNum; public:    GetQQ();    ~GetQQ();public: // 获取QQ号码    std::vector<CString> Init(void);}; 复制代码 代码如下: // FileNa

  • javascript简单实现类似QQ头像弹出效果的方法

    本文实例讲述了javascript简单实现类似QQ头像弹出效果的方法.分享给大家供大家参考.具体实现方法如下: <!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&q

  • javascript 仿QQ滑动菜单效果代码

    [程序源码] 复制代码 代码如下: var QQ = function() { // 公用函数 function T$(id) { return document.getElementById(id); } function T$$(root, tag) { return (root || document).getElementsByTagName(tag); } function $extend(des, src) { for(var p in src) { des[p] = src[p];

  • 来自qq的javascript面试题

    复制代码 代码如下: var info="腾讯拍拍网(www.paipai.com)是腾讯旗下知名电子商务网站."; info +="拍拍网于2005年9月12日上线发布,"; info +="2006年3月13日宣布正式运营,"; info +="是目前国内第二大电子商务平台."; info=info.split(","); for(var i=0; i<info.length; i++) { al

  • C++简单QQ程序服务器端的实现代码

    本文实例为大家分享了C++简单QQ程序服务器端的实现代码,供大家参考,具体内容如下 // ServerDlg.cpp : implementation file // #include "StdAfx.h" #include "Server.h" #include "ServerDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] =

  • JavaScript中的正则表达式使用及验证qq号码的正则

    废话不多说了,直接给大家贴正则表达式代码了. function myValid() { var errorMsg = ""; var res = true; //拿到要验证的值. var receiveName = $("#receiveName").val();//姓名 var receiveMobile = $("#tMobile").val();//手机号 var validCode = $("#validCode").

  • C#编程实现QQ界面的方法

    本文实例讲述了C#编程实现QQ界面的方法.分享给大家供大家参考,具体如下: 步骤: 1.新建一个页面,假如说叫VerticalMenu 2.把html代码copy到html代码区 3.把LoadTopMenu方法copy到cs代码区 4.运行即可 1.html代码 <STYLE type="text/css"> A:link {}{ COLOR: #000000; FONT-SIZE: 12px; TEXT-DECORATION: none} A:visited {}{ C

  • Android编程实现启动界面的方法分析

    本文实例讲述了Android编程实现启动界面的方法.分享给大家供大家参考,具体如下: 最近在弄一个程序启动界面程序,在这里贴下代码.解释一下:后面Intent(qidong.this,"写想要跳转的Activity"); 效果图: 然后建立一个名字为qidon. Activity: import Android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os

  • Android编程使用Fragment界面向下跳转并一级级返回的实现方法

    本文实例讲述了Android编程使用Fragment界面向下跳转并一级级返回的实现方法.分享给大家供大家参考,具体如下: 1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个setSelectedFragment方法用于设置当前加载的Fragment在栈顶,主界面MainActivity须实现此接口,代码如下: package com.example.testdemo; public interface BackHandledInterfa

  • android编程实现局部界面动态切换的方法

    本文实例讲述了android编程实现局部界面动态切换的方法.分享给大家供大家参考,具体如下: 局部界面固定,局部界面可以动态切换.效果如下: 这个效果由3个layout构成 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:

  • Android编程实现QQ表情的发送和接收完整实例(附源码)

    本文实例讲述了Android编程实现QQ表情的发送和接收.分享给大家供大家参考,具体如下: 在自己做一个聊天应用练习的时候,需要用到表情,于是就想着模仿一下QQ表情,图片资源完全copy的QQ.apk,解压就可以得到,这里不细说. 下面将该应用中的表情模块功能抽离出来,以便自己以后复习回顾.. 先看一下效果图: 首先进入界面:(完全仿照QQ) 点击一下上面的表情图标: 选择一些表情,输入一些文字混合: 点击发送: 可以看到文字和表情图片都一起显示出来了. 下面列出一些关键代码: 表情工具类Exp

  • Android编程实现播放音频的方法示例

    本文实例讲述了Android编程实现播放音频的方法.分享给大家供大家参考,具体如下: 在 Android 中播放音频文件一般都是使用 MediaPlayer 类来实现的,它对多种格式的音 频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单.下表列出了 MediaPlayer 类中一些较为常用的控制方法. 方法名 功能描述 setDataSource() 设置要播放的音频文件的位置. prepare() 在开始播放之前调用这个方法完成准备工作. start() 开始或继续播放音频.

  • Android编程实现自定义手势的方法详解

    本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何对其进行管理. 先介绍一下Android系统对手势的管理,Android系统允许应用程序把用户的手势以文件的形式保存以前,以后要使用这些手势只需要加载这个手势库文件即可,同时Android系统还提供了诸如手势识别.查找及删除等的函数接口,具体如下: 一.加载手势库文件: staticGestureL

  • Android编程实现抽屉效果的方法示例

    本文实例讲述了Android编程实现抽屉效果的方法.分享给大家供大家参考,具体如下: 今天在手机上实现了抽屉效果,其实很简单,但是效果却很酷. 首先在layout 下设置xml布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l

  • android编程之下拉刷新实现方法分析

    本文实例讲述了android编程之下拉刷新实现方法.分享给大家供大家参考,具体如下: 现在android应用里面下拉刷新比较多 ,今天自己研究一下相关的资料 public class MyListView extends ListView implements OnScrollListener { private static final String TAG = "listview"; private final static int RELEASE_To_REFRESH = 0;

  • Android编程实现抽屉效果的方法详解

    本文实例讲述了Android编程实现抽屉效果的方法.分享给大家供大家参考,具体如下: android的UI开发确实是一件很有趣的事情,也是一件很有挑战性的事情. 本文章是将自己在开发中的项目中使用到的比较好的抽屉效果的原理以及代码整理后写上来的,以备忘记后可以查阅 抽屉效果的原理很简单,就是给其一个事件监听(动作),然后对此动作所作出的反应(开 or 关): 在编写代码的时候要注意的几点如下: 1. 打开抽屉的图标(即触发抽屉的把手),打开后的界面都是布局在<SlidingDrawer/>与&

随机推荐