Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,添加引用:DropDownCheckList.dll
2,将DropDownCheckList.js放置到网站根目录的aspnet_client\UNLV_IAP_WebControls\DropDownCheckList\文件夹下
3,演示代码
4,获取选择的数据:
Label1.Text = this.DropDownCheckList1.SelectedValuesToString(“,”, “”);
//Label2.Text = this.DropDownCheckList1.SelectedLabelsToString(“,”,””);

效果图:
多选下拉框
引用:http://www.codeproject.com/KB/custom-controls/DropDownCheckList.aspx#xx2456914xx


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

案例:任务管理器中结束一进程,很快就自动出现。解决方法是找到此进程所在的文件进行删除。还有一dll文件删除不掉是因为有exe文件在运行,找到此exe文件进行删除即可。

在界面操作时,去掉√不启作用,正确方法是在cmd下操作:

attrib -s -h -r Client_Files

Attrib
显示、设置或删除指派给文件或目录的只读、存档、系统以及隐藏属性。如果在不含参数的情况下使用,则 attrib 命令会显示当前目录中所有文件的属性。
语法
attrib [{+r | -r}] [{+a | -a}] [{+s | -s}] [{+h | -h}]
attrib [[Drive:][Path] FileName] [/s[/d]]
参数
+r
设置只读文件属性。
-r
清除只读文件属性。
+a
设置存档属性。
-a
清除存档属性。
+s
设置系统文件属性。
-s
清除系统文件属性。
+h
设置隐藏文件属性。
-h
清除隐藏文件属性。
[Drive:][Path] FileName
指定要显示或更改其属性的目录、文件或文件组的位置和名称。可以在 filename 参数中使用通配符(? 和 *)来显示或更改一组文件的属性。
/s
将 attrib 和任意命令行选项应用到当前目录及其所有子目录中的匹配文件。
/d
将 attrib 和任意命令行选项应用到目录。
/?


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,选择语句:

* 每句后加分号;
* else if 应为elseif,中间不留空格。mssql为:if begin … end else if begin … end 形式

IF ( _TranType=’Insert’ ) THEN
INSERT INTO bmdcustomer(CustomerName,CustomerAddress,tel,Remark,Type,LastEditBy,LastEditDate)
VALUES(_CustomerName,_CustomerAddress,_tel,_Remark,_Type,_LastEditBy,now());
SET _Id = @@IDENTITY;

ELSEIF ( _TranType=’Update’ ) THEN
INSERT INTO bmdcustomer(CustomerName,CustomerAddress,tel,Remark,Type,LastEditBy,LastEditDate)
VALUES(_CustomerName,_CustomerAddress,_tel,_Remark,_Type,_LastEditBy,now());
SET _Id = @@IDENTITY;
ELSE
SELECT 1;
END IF;

2,日期:当前时间,Mysql: now(), MsSql:getdate()


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,将循环因子1,2,3,4,5....存入一表中,用此表与目标表进行关联即可。
2,例子:提取 字符串  ‘13604784785薛小姐’非中文部分
create table #tt(n int)          --循环数
declare @tt int
set @tt=1
while @tt<=200
begin
        insert #tt values(@tt)
        set @tt=@tt+1
END
CREATE TABLE #ts(tel VARCHAR(100))
INSERT INTO #ts VALUES ('13604784785薛小姐')

declare @string varchar(200)
SELECT TOP 1 *,SUBSTRING(tel,1,n-1) FROM (
SELECT tel,n,case when SUBSTRING(tel,n,1) LIKE '[0-9]' THEN NULL ELSE STUFF(tel,n,0,'#') END AS 'string'
FROM #ts JOIN #tt ON n < LEN(#ts.tel))m1
WHERE m1.string IS NOT null


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

一般用法为:
select case 1 when 1 then ‘yes’ when 2 then ‘no’ end
即为:when 1=1 取 ‘yes’
when 1=2 取 ‘no’
多条件为:
SELECT CASE WHEN 1=2 THEN 2 when 3=3 then 3 ELSE 4 end
case后不带参数,when可作多个条件

带语句使用:
–若是一次部门,输出第一次下订单日期,若是二次部门等,输出第一次分配客户日期
SELECT md.DepartName,a.UserName,CASE(md.DepartType)
WHEN ‘first’
THEN (SELECT MIN(orderdate) FROM bdOrder bo WHERE bo.SalesStaff=a.Account )
ELSE (SELECT MIN(opendate) FROM bdCustomerAllocate bca WHERE bca.SalesStaff =a.Account ) END
FROM frmuser a(NOLOCK)
JOIN mdDepartment md ON a.DepartmentId = md.ID
注: THEN 后面是一个值,故SELECT要用括号括起来。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

对于Windows程序 和Web 应用程序来说,他们运行的路径是不一样的,所以关键是判断当前运行的程序是哪种程序.于是可以使用如下的代码 string path = ""; if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)//Windows应用程序则相等 …{ path = AppDomain.CurrentDomain.BaseDirectory; } else …{ path = AppDomain.CurrentDomain.BaseDirectory + "Bin\"; }

HttpContext.Current.Request.Url.AbsoluteUri

        //获取网站根目录
        public static string GetRootURI()
        {
            string AppPath = "";
            HttpContext HttpCurrent = HttpContext.Current;
            HttpRequest Req;
            if (HttpCurrent != null)
            {
                Req = HttpCurrent.Request;

                string UrlAuthority = Req.Url.GetLeftPart(UriPartial.Authority);
                if (Req.ApplicationPath == null || Req.ApplicationPath == "/")
                    //直接安装在   Web   站点  
                    AppPath = UrlAuthority;
                else
                    //安装在虚拟子目录下  
                    AppPath = UrlAuthority + Req.ApplicationPath;
            }
            return AppPath;
        }


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

关键点是将不变化的东西固定下来,避免重复计算。设计表时,将不依赖外部数据,可直接得出的部分提取出来,方便查询。

有一快递A,快递价格递增,价格表如下:
重量(kg) 费用(元)
0-1 6
1-5 3/kg
5-10 2/kg
10-9999 1/kg
同时有一快递B,直接按公斤给价格,价格表如下:
0-1 6
1-5 16
5-10 24
10-9999 30
设计一table,将两种的价格表录入系统,并给出查询物品重量为n时的快递价格。

思路:快递A价格递增,计算时要考虑他之前物重范围相加。而B就相对简单,直接select取出。而价格表存放到同一表中,就要考虑容纳上面的两种特性。设计表如下:
快递公司 重量下限 重量上限 费用 子范围费用 (注:用附加费用存储比它小的范围的数据)
表数据存储为:
快递公司 重量下限 重量上限 费用 子范围费用
A 0 1 6 0
A 1 5 3 6 (直接给出前一范围的价格)
A 5 10 2 18
A 10 9999 1 28
B 0 1 6 0
B 1 5 16 0
B 5 10 24 0
B 10 9999 30 0

当外部传入快递公司为@X,物重为@weight时求其快递价格,可用如下方式:
SELECT CASE(附加费用) WHEN 0 THEN 费用 ELSE 子范围费用 + (n – 重量下限) * 费用
FROM 快递费用表
WHERE 快递公司 = @X
AND @weight BETWEEN 重量下限 AND 重量上限


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

72法则
假设以年利率r%投资一笔钱y年,如果r*y=72,那么你的投资差不多会翻倍。
即:增长率乘以增长次数若为72,那么数字翻倍。
原理:(1+ x)的y次方 = 2
y= ln2 / ln(1+x) ; ln2 = 0.69, ln(1+x) = x (泰勒公式),
故有:y= 0.69/x 即:xy = 0.69 , 0.69不易估算,换成70,72。之所以选用72,是因为它有较多因数,容易被整除,更方便计算。它的因数有1、2、3、4、6、8、9、12和它本身。

具体例子:

以年利率6%投资1000美元12年,可得到约2000美元(实际数字是2012美元)

以年利率8%投资1000美元9年,可得到约2000美元(实际数字式1999美元)

假设一个指数程序解决规模为n=40的问题需要10秒的时间,并且n每增加1运行时间就增加12%,问当我们把n=100的时候,大约需要多少运行时间?

根据72法则,n每增加6运行时间翻倍,那么当n增加60,运行时间增加为原来的2^10≈1000倍。因此,n=100时,大约需要10 000秒(2~3个小时)。

联合国估算1998年的世界人口为59亿,年增长率为1.33%。如果按照这个速率下去,到2050年人口会是多少?

2050-1998=52; 52*1.33≈70

因此根据72法则,2050年人口约为59*2=118亿。

出处:(http://www.cnblogs.com/yjf512/)


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1M = 1024k
1K = 1024bit
1bit = 8位
一个整数占32位(4bit),那么1M共可存放的整数个数为:1024*1024/4=262144个

题目:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复。求如何将这n个正整数升序排列。
约束:最多有1MB的内存空间可用,有充足的磁盘存储空间。
直接读取所有文件入内存进行排序是不现实的,因为最多有1MB空间,最大可存放的数字是262144个
,可以分段取:从头到尾一段一段的取数据,在0-250000的放入内存并排序输出
从头到尾一段一段的取数据, 在250000-500000的放入内存并输出
从头到尾一段一段的取数据, 在500000-750000的放入内存并输出
从头到尾一段一段的取数据, 在750000-1000000的放入内存并输出

位图法排序:hash对应
定义一字符串,长度为10^7,初始每位为0,每位的顺序对应每个数字,分段读入数字,将对应位设置为1,
如:对于数字3,将此字符串的第三位设置为1即可。
然后输出为1的位数即可,不需排序。
与上边的方法相比,上边的方法要40次全文件扫描,而此方法仅需一次,并用结果不用排序
以空间换时间。

应用范围:1,知道上限。2,数字没有重复

推广:
给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中
unsign int范围为0~2^32-1(4294967295≈5*10^9) 使用位图hash对应5*10^9/8/10^3/10^3 = 625MB.

1. 我们使用625M的字符串。每一位设置为0.
2. 将40亿个unsign int 遍历一遍。使用位图法将字符串中的对应位转化为1。
3. 读取“再给一个数i” 查看bit[i] 是否为1,1则有存在,0则不存在。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
从小到大排序

1,冒泡:
当前元素是a[i],在a[0]到a[i-1]之间依次比对
若a[j]> a[i],a[j]与a[i]进行交换,(小值向上浮动,保证每次循环后a[0]获得最小值,a[1]二小)
因要与左侧元素比对,故循环从a[1]开始直到数据尾a[n-1]

2,选择:
当前元素是a[i],在a[i+1]与a[n-1]之间依次比对,取出最小值与a[i]进行交换。
以保证:第一次:比较n个元素,取出最小的放在第一个位置(进行交换)
        第二次:比较剩下的n-1个元素,取出第二小的放在第二个位置
         ...
因要与右侧元素比对,故循环从a[0]开始到a[n-2]结束

3,插入:
当前元素是a[i],在a[0]到a[i-1]之间依次比对,
若a[j] > a[i],a[j]右移到a[j+1]
否则,说明当前位置的前一个位置正是要插入的位置,跳出循环,将a[i]的值放到a[j+1]处即可
(保证每次的a[i]都放在恰当的位置)
因要与左侧元素比对,故循环从a[1]开始直到数据尾a[n-1]
注:
(1)若n较小,可采用直接插入或直接选择排序。
但当记录规模较大时,因为直接选择移动的记录数少于直接插人,所以宜用选直接选择排序。
冒泡:    比较次数,频繁的交换操作
直接插入:比较次数,频繁的移位操作
选择:    比较次数,更少的交换操作

4,归并排序:递归拆分与合并。将数组拆分成左右数组,进行合并。

5  ,快速排序:
      1)性质: 若一组数已经排好序,那么对于此组数每一个元素来说,每一个元素的左边都比它小,右边都比它大。
应用此性质:将当前元素放到恰好位置,让左区的元素都比它小,右区的元素都比它大,然后递归,
直到区细分到单个元素为止。
过程:对于数组第一个元素进行排序,循环:将左区元素第一个比当前元素大的与右区第一个比当前元素小的进行交换,
直到左区的都比当前元素小,右区的都比当前元素大。然后递归左区与右区。
     2)快速排序也是使用了分治法的思路,不需要合并,快速排序和归并排序都是分治法,它们的区别在于,快速排序不需
要合并,快速排序的平均运行时间为Θ(n log n)

6,希尔排序,将整个无序列分割成若干小的子序列分别进行插入排序的方法,
是插入排序的一种高效稳定的改进版本。
先取一个正整数d1

快速排序
快速排序

算法的实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication31
{
    class Program
    {
        public delegate void Sort(int[] arr);
        static void Main(string[] args)
        {
            int[] arr = { 9,8,7,6,5,4,3,2,1};
            //BubbleSorter(arr);
            //Printf("BubbleSorter", arr);

            //SelectSorter(arr);
            //Printf("SelectSorter", arr);

            InsertSorter(arr);
            Printf("InsertSorter", arr);

           
            //Printf("QuickSort", arr, QuickSort);
            //QuickSort(arr,0,arr.Length-1);
            //Printf("QuickSort",arr);
            Console.Read();
        }

        public static void Printf(string type,int[] arr) {
            Console.WriteLine(string.Format("-------------------{0}-------------------",type));
            DateTime DateTime = DateTime.Now;
            //System.Threading.Thread.Sleep(1000);
            //sort(arr);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < arr.Length; i++) {
                sb.Append(","+arr[i].ToString() );
            }
            Console.WriteLine(sb.ToString().Substring(1,sb.Length-1));
            string timespent = (DateTime.Now.Subtract(DateTime)).TotalMilliseconds.ToString();
            Console.WriteLine(string.Format("-------------------{0}:{1}s----------------", type, timespent));
           
        }


        //冒泡法,每次将元素放到合适的位置,
        //保持当前元素之前的元素处在有序状态,然后将当前元素与之前的有序元素进行对比交换
        //复杂度:1+2+..(n-1) = (n-1)*n/2,比上边的复杂度少了一半。
        //冒泡:即相邻数据的交换
        private static int[] BubbleSorter(int[] arr)
        {
            int key = 0;
            int tmp = 0;
            for (int i = 1; i < arr.Length; i++) {
                key = arr[i];
                for (int j = i - 1; j >= 0; j--) {
                    if (arr[j] > key) {
                        tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                    }
                }
            }
            return arr;
        }

        //选择排序:
        //第一次:比较n个元素,取出最小的放在第一个位置(进行交换)
        //第二次:比较剩下的n-1个元素,取出第二小的放在第二个位置
        // ......
        //(n-1)*n/2加少量交换,而冒泡是(n-1)*n/2加多次交换
        private static void SelectSorter(int[] arr)
        {
            int key = 0;
            int k = 0;
            for (int i = 0; i < arr.Length-1; i++)
            {
                k = i;
                for (int j = i + 1; j < arr.Length; j++)
                {
                    if (arr[j] < arr[k] )
                    {
                        k = j;
                    }
                }
                key = arr[i];
                arr[i] = arr[k];
                arr[k] = key;
            }
           
        }



        /*
        插入法,每次将元素放到最合适的位置,
        保持当前元素之前的元素处在有序状态,然后将当前元素与之前的有序元素进行对比
        若对比的元素大于当前元素,则将此对比的元素右移一位,若对比元素小于当前元素,说明此对比元素位置之后的那个
        位置正是要插入的位置,插入即可
        注:1,与增强版冒泡排序相同的一点是保持当前元素之前的元素处于有序状态,
              然后逐个比较,满足条件的元素进行右移操作而不是交换。
            2,参考打牌,拾起一张牌,放已排好顺序的牌堆中进行插入,右移每张牌直到找到比它小的,然后插入到之前即可。
           //(n-1)*n/2加少量移位,比选择好一些
        */
        private static void InsertSorter(int[] arr)
        {
            int key = 0;
            int j = 0;
            for (int i = 1; i < arr.Length; i++)
            {
                key = arr[i];
                for (j=i-1; j >= 0; j--)
                {
                    if (arr[j] > key)
                    {
                        arr[j + 1] = arr[j];
                    }
                    else { break; }
                }
                arr[j+1] = key;
            }
           
        }

        ///快速排序:利用的性质,若一个数组排好顺序,那么对于每一个元素来说,它左边的都比此元素小,右边的都比此元素大。
        ///过程,对于数组第一个元素进行排序,循环:将左区元素第一个比当前元素大的与右区第一个比当前元素小的进行交换,
        ///直到左区的都比当前元素小,右区的都比当前元素大。然后递归左区与右区。
        ///(若左区或右区进入对方区域,则说明循环完毕,跳出即可。)
        ///保证得到的结果是:它左边的元素都比此元素小,右边的元素都比此元素大
        ///然后分别从此元素左侧、若侧元素进行快速排序
        private static void QuickSort(int[] arr, int left,int right) {
            if (left >= right) { return; }
            int i=left;
            int j=right+1;
            while (true)
            {
                while (i < arr.Length-1 && arr[++i] < arr[left]) ;
                while (j >= 0 && arr[--j] > arr[left]) ;
                if (i >= j) { break; }
                else {
                    swap(ref arr[i], ref arr[j]);
                }
            }
            swap(ref arr[left], ref arr[j]);
            QuickSort(arr, left, j - 1);
            QuickSort(arr, j + 1, right);
        }
        //交换两个数
        static void swap( ref int left,ref int right) {
            int tmp = left;
            left = right;
            right = tmp;
        }

        /// 
        /// 归并排序:递归拆分与合并。将数组拆分成左右数组,进行合并。
        int[] MeargeSort(int[] data)
        {
            //取数组中间下标
            int middle = data.Length / 2;
            //初始化临时数组let,right,并定义result作为最终有序数组
            int[] left = new int[middle], right = new int[middle], result = new int[data.Length];
            if (data.Length % 2 != 0)//若数组元素奇数个,重新初始化右临时数组
            {
                right = new int[middle + 1];
            }
            if (data.Length <= 1)//只剩下1 or 0个元数,返回,不排序
            {
                return data;
            }
            int i = 0, j = 0;
            foreach (int x in data)//开始排序
            {
                if (i < middle)//填充左数组
                {
                    left[i] = x;
                    i++;
                }
                else//填充右数组
                {
                    right[j] = x;
                    j++;
                }
            }
            left = MeargeSort(left);//递归左数组
            right = MeargeSort(right);//递归右数组
            result = Merge(left, right);//开始排序
            //this.Write(result);//输出排序
            return result;
        }
        /// 
        /// 归并排序之并:排序在这一步
        /// 
        /// 左数组
        /// 右数组
        /// 合并左右数组排序后返回
        int[] Merge(int[] a, int[] b)
        {
            //定义结果数组,用来存储最终结果
            int[] result = new int[a.Length + b.Length];
            int i = 0, j = 0, k = 0;
            while (i < a.Length && j < b.Length)
            {
                if (a[i] < b[j])//左数组中元素小于右数组中元素
                {
                    result[k++] = a[i++];//将小的那个放到结果数组
                }
                else//左数组中元素大于右数组中元素
                {
                    result[k++] = b[j++];//将小的那个放到结果数组
                }
            }
            while (i < a.Length)//这里其实是还有左元素,但没有右元素
            {
                result[k++] = a[i++];
            }
            while (j < b.Length)//右右元素,无左元素
            {
                result[k++] = b[j++];
            }
            return result;//返回结果数组
        }
    }
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

克拉默法则
克拉默法则


应用:
设有未知数x1、x2、x3、x4,满足以下条件:
x1 + 3*x2 -2*x3 + x4 = 1
2*x1 + 5*x2 -3*x3 + 2*x4 = 3
-3*x1+ 4*x2 + 8*x3 -2*x4 = 4
6*x1 -x2 - 6*x3 + 4*x4 =2
用克拉默法则求出x1、x2、x3、x4的值。

解题方法:

我们在(A1:E4)单元格分别输入系数和等号右边的数值
1    3    -2    1    1
2    5    -3    2    3
-3    4    8    -2    4
6    -1    -6    4    2

在单元格A5输入公式:
=MDETERM(A1:D4)    注意这里是(A1:D4),而不是(A1:E4)

MDETERM

返回一个数组的矩阵行列式的值。

语法

MDETERM(array)

Array    行数和列数相等的数值数组
MDETERM(A1:C3) 等于
A1*(B2*C3-B3*C2) + A2*(B3*C1-B1*C3) + A3*(B1*C2-B2*C1)

选中(E1:E4)这一列单元格,复制:按Ctrl + c,
然后点中A1单元,粘贴:按Ctrl +  v,
A5单元格变成了 -34 ,于是得 D1 = -34

取消:按Ctrl + z,A5单元格仍变回17。点中B1单元格,粘贴:按Ctrl +  v,
A5单元格变成了 0 ,于是得 D2 = 0

取消:按Ctrl + z,A5单元格仍变回17。点中C1单元格,粘贴:按Ctrl +  v,
A5单元格变成了 17,于是得 D3 = 17

取消:按Ctrl + z,A5单元格仍变回17。点中D1单元格,粘贴:按Ctrl +  v,
A5单元格变成了 85,于是得 D4 = 85

根据克拉默法则:

x1 = D1 / D = -34 / 17 = -2
x2 = D2 / D =    0 / 17 = 0
x3 = D3 / D =  17 / 17 = 1


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
宽度与高度
1,offsetTop、offsetLeft、offsetWidth、offsetHeight
offsetTop、offsetLeft:指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧、左侧位置。
offsetWidth、offsetHeight:obj.offsetWidth 指 obj 控件自身的绝对宽度、高度,不包括因 overflow 而未显示的部分。

2,scrollTop、scrollLeft、scrollWidth、scrollHeight
*scrollTop、scrollLeft :滚动条卷起来的高度值及左值。
*scrollWidth、scrollHeight:是内层元素的实际宽度、高度 + 外层元素 padding(包括因 overflow 而未显示的部分)

3,clientHeight 与 clientWidth:是document.body内容可视区域的高度、宽度,也就是说页面浏览器中可以看到内容的这个区域的高度、宽度

4,window.screen.height与window.screen.width:指屏幕分辨率的高与屏幕分辨率的宽  。clientHeight+浏览器工具条的高度与screen.height相近。

注:1,offsetTop与top的区别:

* offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。
* offsetTop 只读,而 style.top 可读写。


例:定位于右下角:




Watermark

.........