中英文混合字符串截取指定长度,重载应用撞车时如何解决
分类:面向对象

private string Func(string str) { return str + "1"; } private string Func(bool? b) { if (b != null) { return b.ToString() + "2"; } else { return "2"; } } string str = null; bool? b = null; MessageBox.Show(Func(str)); MessageBox.Show(Func(b));

图片 1使用
图片 2RegistryManager rwRgs=new RegistryManager() ;
图片 3        private void button4_Click(object sender, System.EventArgs e)
图片 4图片 5        图片 6{
图片 7            string str1=rwRgs.ReadSettings("myName") ;
图片 8            if(str1!="")
图片 9                MessageBox.Show(str1) ;
图片 10        
图片 11        }
图片 12
图片 13
图片 14        private void button5_Click(object sender, System.EventArgs e)
图片 15图片 16        图片 17{
图片 18            if(rwRgs.SaveSettings("myName","furenjun"+System.DateTime.Now.ToString()))
图片 19                MessageBox.Show("save Success") ;
图片 20
图片 21  
图片 22        }
图片 23
图片 24        private void button6_Click(object sender, System.EventArgs e)
图片 25图片 26        图片 27{
图片 28            if(rwRgs.DeleteValue("myName"))
图片 29                MessageBox.Show("del Success") ;
图片 30        }
图片 31
图片 32        private void button7_Click(object sender, System.EventArgs e)
图片 33图片 34        图片 35{
图片 36             if(rwRgs.CountValue() >0)
图片 37                 MessageBox.Show (rwRgs.CountValue().ToString() );
图片 38        }
图片 39
图片 40        private void button8_Click(object sender, System.EventArgs e)
图片 41图片 42        图片 43{
图片 44
图片 45            string[] str1=rwRgs.GetSubKeyValueNames();
图片 46            str1=rwRgs.GetMySubKeyNames();  
图片 47            if(str1!=null)
图片 48图片 49            图片 50{
图片 51                
图片 52                int i=str1.Length;
图片 53                MessageBox.Show(i.ToString() ) ;
图片 54                string s1="";
图片 55                for(int j=0;j<i;j++)
图片 56图片 57                图片 58{
图片 59                    s1+=str1[j]+" ";
图片 60                }
图片 61                MessageBox.Show(s1.ToString() ) ;
图片 62
图片 63            }
图片 64        }
图片 65
图片 66        private void button9_Click(object sender, System.EventArgs e)
图片 67图片 68        图片 69{
图片 70            MessageBox.Show ( Application.ProductName);
图片 71        }

//字符是否为汉字
        public bool IsChinese(char c)
        {
            return (int)c >= 0x4E00 && (int)c <= 0x9FA5;
        }
        //获得字节长度
        private int getLengthb(string str)
        {
            return System.Text.Encoding.Default.GetByteCount(str);
        }

如上代码,Func 重载是不报错的,是正确的,但下面这种应用时就会出错。

图片 72using System;
图片 73using System.Windows.Forms;
图片 74using Microsoft.Win32;
图片 75namespace ReadWriteRegiest
图片 76图片 77图片 78{
图片 79图片 80    /**//// <summary>
图片 81    /// RegistryManager 的摘要说明。
图片 82    /// </summary>
图片 83    public class RegistryManager
图片 84图片 85    图片 86{
图片 87        public RegistryManager()
图片 88图片 89        图片 90{
图片 91            //
图片 92            // TODO: 在此处添加构造函数逻辑
图片 93            //
图片 94        }
图片 95
图片 96        string myKeyStr="frj";
图片 97        string mySubKeyStr="frjChild";
图片 98        public string myKey
图片 99图片 100        图片 101{
图片 102图片 103            get图片 104{return myKeyStr;}
图片 105图片 106            set图片 107{myKeyStr=value;}
图片 108
图片 109        }
图片 110
图片 111        public string mySubKey
图片 112图片 113        图片 114{
图片 115图片 116            get图片 117{return mySubKeyStr;}
图片 118图片 119            set图片 120{mySubKeyStr=value;}
图片 121
图片 122        }
图片 123        
图片 124图片 125        /**//// <summary>
图片 126        /// 保存键值
图片 127        /// </summary>
图片 128        /// <param name="mySetValueName"></param>
图片 129        /// <param name="mySetValue"></param>
图片 130        /// <returns></returns>
图片 131        public  bool SaveSettings(string mySetValueName,string mySetValue)
图片 132图片 133        图片 134{
图片 135            
图片 136
图片 137            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows",true);
图片 138            RegistryKey frjKey=softwareKey.CreateSubKey(myKey) ;
图片 139            RegistryKey frjSubKey=frjKey.CreateSubKey(mySubKey) ;
图片 140            try
图片 141图片 142            图片 143{    
图片 144                frjSubKey.SetValue(mySetValueName,mySetValue) ;
图片 145            }
图片 146            catch(System.Exception e1)
图片 147图片 148            图片 149{
图片 150                MessageBox.Show(e1.ToString(),"保存键值错误",MessageBoxButtons.OK ,MessageBoxIcon.Information );
图片 151
图片 152                frjSubKey.Close();
图片 153                frjKey.Close();
图片 154                return false;
图片 155            }
图片 156
图片 157            frjSubKey.Close();
图片 158            frjKey.Close();
图片 159            return true;
图片 160        }
图片 161
图片 162
图片 163图片 164        /**//// <summary>
图片 165        /// 读键值
图片 166        /// </summary>
图片 167        /// <param name="mySetValueName"></param>
图片 168        /// <returns></returns>
图片 169        public string  ReadSettings(string mySetValueName)
图片 170图片 171        图片 172{
图片 173            string ReadValueStr="";
图片 174            
图片 175            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows",true);
图片 176            RegistryKey frjKey=softwareKey.OpenSubKey(myKey) ;
图片 177            if(frjKey==null)
图片 178图片 179            图片 180{
图片 181                frjKey.Close();
图片 182                return ReadValueStr;
图片 183            }
图片 184            RegistryKey frjSubKey=frjKey.OpenSubKey (mySubKey) ;
图片 185            try
图片 186图片 187            图片 188{    
图片 189                if(frjSubKey==null)
图片 190图片 191                图片 192{
图片 193                    frjSubKey.Close();
图片 194                    frjKey.Close();
图片 195                    return ReadValueStr;
图片 196                }
图片 197                ReadValueStr=frjSubKey.GetValue(mySetValueName).ToString()  ;
图片 198            }
图片 199            catch(System.Exception e1)
图片 200图片 201            图片 202{
图片 203                MessageBox.Show(e1.ToString(),"读注册表错误",MessageBoxButtons.OK ,MessageBoxIcon.Information );
图片 204
图片 205            }
图片 206            
图片 207            frjSubKey.Close();
图片 208            frjKey.Close();
图片 209            return ReadValueStr;
图片 210            
图片 211
图片 212        }
图片 213
图片 214
图片 215图片 216        /**//// <summary>
图片 217        /// 删除键值
图片 218        /// </summary>
图片 219        /// <param name="mySetValueName"></param>
图片 220        /// <returns></returns>
图片 221        public bool DeleteValue(string mySetValueName)
图片 222图片 223        图片 224{
图片 225            
图片 226            
图片 227            //                RegistryKey MyReg = Registry.CurrentUser.OpenSubKey
图片 228            //                ("SOFTWARE\SomeCompany\SomeApp\SomeVer", true);
图片 229
图片 230            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows",true);
图片 231            
图片 232            RegistryKey frjKey=softwareKey.OpenSubKey(myKey) ;
图片 233            if(frjKey==null)
图片 234图片 235            图片 236{
图片 237                frjKey.Close();
图片 238                return false;
图片 239            }
图片 240            RegistryKey frjSubKey=frjKey.OpenSubKey (mySubKey) ;
图片 241            try
图片 242图片 243            图片 244{    
图片 245                if(frjSubKey==null)
图片 246图片 247                图片 248{
图片 249                    frjSubKey.Close();
图片 250                    frjKey.Close();
图片 251                    
图片 252                    return false;
图片 253                }
图片 254                //frjSubKey.DeleteSubKeyTree(mySubKey) ; //递归删除子项和任何子级子项。字符串 subKey 不区分大小写。
图片 255                //                备注
图片 256                //必须具有适当权限才能删除子项及其目录树。
图片 257                //警告   删除特定的项将移除目录树中该项下的所有项,并且不提供任何警告。
图片 258                //如果想仅在子项没有子级子项时才删除该子项,请改用 DeleteSubKey。
图片 259
图片 260                frjSubKey.DeleteValue(mySetValueName,true);
图片 261
图片 262
图片 263            }
图片 264            catch(System.Exception e1)
图片 265图片 266            图片 267{
图片 268                MessageBox.Show(e1.ToString(),"删除键值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
图片 269                
图片 270                frjSubKey.Close();
图片 271                frjKey.Close();
图片 272                return false;
图片 273
图片 274            }
图片 275            
图片 276            frjSubKey.Close();
图片 277            frjKey.Close();
图片 278            return true;
图片 279            
图片 280        }
图片 281
图片 282
图片 283图片 284        /**//// <summary>
图片 285        /// 检索项中值的计数
图片 286        /// </summary>
图片 287        /// <returns></returns>
图片 288        public int  CountValue( )
图片 289图片 290        图片 291{
图片 292            int i=0;
图片 293            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows",true);
图片 294            RegistryKey frjKey=softwareKey.OpenSubKey(myKey) ;
图片 295            if(frjKey==null)
图片 296图片 297            图片 298{
图片 299                frjKey.Close(); 
图片 300                return i;
图片 301            }
图片 302                
图片 303            RegistryKey frjSubKey=frjKey.OpenSubKey (mySubKey) ;
图片 304            try
图片 305图片 306            图片 307{    
图片 308                if(frjSubKey==null)
图片 309图片 310                图片 311{
图片 312                    frjSubKey.Close();
图片 313                    frjKey.Close();
图片 314                    return i;
图片 315                }
图片 316                
图片 317            }
图片 318            catch(System.Exception e1)
图片 319图片 320            图片 321{
图片 322                MessageBox.Show(e1.ToString(),"统计检索项中值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
图片 323                frjSubKey.Close();
图片 324                frjKey.Close();
图片 325                return 0;
图片 326
图片 327            }
图片 328            
图片 329            i=frjSubKey.ValueCount;  
图片 330            frjSubKey.Close();
图片 331            frjKey.Close();
图片 332
图片 333            return i;
图片 334        }
图片 335
图片 336         
图片 337
图片 338图片 339        /**//// <summary>
图片 340        /// 检索与此项值关联的所有值名称的字符串数组
图片 341        /// </summary>
图片 342        /// <returns></returns>
图片 343        public string[] GetSubKeyValueNames()
图片 344图片 345        图片 346{
图片 347            string[] ValueNames=null; 
图片 348            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows",true);
图片 349            RegistryKey frjKey=softwareKey.OpenSubKey(myKey) ;
图片 350            if(frjKey==null)
图片 351图片 352            图片 353{
图片 354                frjKey.Close(); 
图片 355                return ValueNames;
图片 356            }
图片 357                
图片 358            RegistryKey frjSubKey=frjKey.OpenSubKey (mySubKey) ;
图片 359            try
图片 360图片 361            图片 362{    
图片 363                if(frjSubKey==null)
图片 364图片 365                图片 366{
图片 367                    frjSubKey.Close();
图片 368                    frjKey.Close();
图片 369                    return ValueNames;
图片 370                }
图片 371                ValueNames=frjSubKey.GetValueNames() ;
图片 372            }
图片 373            catch(System.Exception e1)
图片 374图片 375            图片 376{
图片 377                MessageBox.Show(e1.ToString(),"统计检索项中值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
图片 378                frjSubKey.Close();
图片 379                frjKey.Close();
图片 380                return ValueNames;
图片 381
图片 382            }
图片 383            
图片 384              
图片 385            frjSubKey.Close();
图片 386            frjKey.Close();
图片 387
图片 388            return ValueNames;
图片 389
图片 390        }
图片 391
图片 392
图片 393        
图片 394图片 395        /**//// <summary>
图片 396        /// To obtain a list of all the subkeys (child keys) that exist within your present RegistryKey object
图片 397        /// </summary>
图片 398        /// <returns></returns>
图片 399        public string[] GetMySubKeyNames()
图片 400图片 401        图片 402{
图片 403            string[] mySubKeyNames=null; 
图片 404            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows",true);
图片 405            RegistryKey frjKey=softwareKey.OpenSubKey(myKey) ;
图片 406            if(frjKey==null)
图片 407图片 408            图片 409{
图片 410                frjKey.Close(); 
图片 411                return mySubKeyNames;
图片 412            }
图片 413            mySubKeyNames=frjKey.GetSubKeyNames();  
图片 414
图片 415            RegistryKey frjSubKey=frjKey.OpenSubKey (mySubKey) ;
图片 416            try
图片 417图片 418            图片 419{    
图片 420                if(frjSubKey==null)
图片 421图片 422                图片 423{
图片 424                    frjSubKey.Close();
图片 425                    frjKey.Close();
图片 426                    return mySubKeyNames;
图片 427                }
图片 428                //mySubKeyNames=frjSubKey.GetSubKeyNames()  ;
图片 429            }
图片 430            catch(System.Exception e1)
图片 431图片 432            图片 433{
图片 434                MessageBox.Show(e1.ToString(),"统计检索项中值出错",MessageBoxButtons.OK ,MessageBoxIcon.Information );
图片 435                frjSubKey.Close();
图片 436                frjKey.Close();
图片 437                return mySubKeyNames;
图片 438
图片 439            }
图片 440            
图片 441              
图片 442            frjSubKey.Close();
图片 443            frjKey.Close();
图片 444
图片 445            return mySubKeyNames;
图片 446
图片 447        }
图片 448
图片 449        public bool AutoRunProgram()
图片 450图片 451        图片 452{
图片 453            
图片 454            string Pname=Application.ProductName;
图片 455            string ProgramNameAndPath= Application.StartupPath+@""+Pname+".exe";
图片 456            RegistryKey softwareKey=Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run",true);
图片 457            try
图片 458图片 459            图片 460{
图片 461                if(softwareKey==null)
图片 462图片 463                图片 464{
图片 465                    //如果子键不存在则创建之
图片 466                    softwareKey=Registry.LocalMachine.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Run");
图片 467
图片 468                }
图片 469                string[] CheckPname=softwareKey.GetValueNames(); 
图片 470                int i=CheckPname.Length;
图片 471//                MessageBox.Show(i.ToString() ) ;
图片 472                bool find=false;
图片 473                int j=0;
图片 474                while(j<i && !find)
图片 475图片 476                图片 477{
图片 478                    if(CheckPname[j]==Pname)
图片 479图片 480                    图片 481{    
图片 482                        find=true;
图片 483//                        MessageBox.Show(j.ToString() +"   "+CheckPname[j] );
图片 484                    }
图片 485                    j++;
图片 486
图片 487                }
图片 488                 
图片 489                if(!find)   
图片 490图片 491                图片 492{
图片 493                    //在注册表中设置自动启动程序
图片 494                    softwareKey.SetValue(Pname, ProgramNameAndPath) ;
图片 495                }
图片 496                else
图片 497图片 498                图片 499{
图片 500                    if(softwareKey.GetValue(Pname).ToString() !=ProgramNameAndPath )
图片 501                        softwareKey.SetValue(Pname, ProgramNameAndPath) ;
图片 502//                    else
图片 503//                        MessageBox.Show("已经有了") ;
图片 504                }
图片 505            }
图片 506            catch
图片 507图片 508            图片 509{
图片 510                softwareKey.Close();  
图片 511                return false;
图片 512            }
图片 513            softwareKey.Close(); 
图片 514            return true;
图片 515        }
图片 516
图片 517    }
图片 518}
图片 519

        //c#的中英文混合字符串截取指定长度,startidx从0开始 by gisoracle@126.com
        public string getStrLenB(string str, int startidx, int len)
        {
            int Lengthb = getLengthb(str);
            if (startidx + 1 > Lengthb)
            {
                return "";
            }
            int j = 0;
            int l = 0;
            int strw = 0;//字符的宽度
            bool b = false;
            string rstr = "";
            for (int i = 0; i < str.Length; i++)
            {
                char c = str[i];
                if (j >= startidx)
                {
                    rstr = rstr + c;
                    b = true;
                }
                if (IsChinese(c))
                {
                    strw = 2;
                }
                else
                {
                    strw = 1;
                }
                j = j + strw;
                if (b)
                {
                    l = l + strw;
                    if ((l+1)>= len) break;

Func(null);

                }

因为它不知道这个 null 是 string 的,还是 bool? 的,除了用上面那种变量的形式来解决外,还有一种方法:

            }
            return rstr;

MessageBox.Show(Func((string)null)); MessageBox.Show(Func((bool?)null));

 

        }

        private void button4_Click(object sender, EventArgs e) //测试by yl gisoracle@126.com
        {
            MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 0, 10));//gisoracle
            MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 1, 10));//isoracle欢
            MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 2, 10));//isoracle欢
        }

 

本文由10bet手机官网发布于面向对象,转载请注明出处:中英文混合字符串截取指定长度,重载应用撞车时如何解决

上一篇:利用百度地图JSAPI生成h7n9禽流感分布图实现代码,百度地图js小结 下一篇:没有了
猜你喜欢
热门排行
精彩图文