当前位置: 首页 > 编程日记 > 正文

ASP.NET重用代码技术 - 用户控件技术

作者: 苏红超   


   
   
  使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行。我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一些局限性。在本文中,我们将会一同探讨另外一种新的ASP.NET技术:用户控件。
  
  什么是用户控件(User Controls)?
  为了能更好的理解用户控件的重要性,我们先来看看一段小小的“历史”。在以前的ASP当中,可重用的技术实现选择是相当受限制的。许多的开发者一般都是借助将公共的常用的子过程放到那些包含文件当中的做法来实现一定的所谓代码重用的。比如,如我们想要在许多的ASP页面当中现实一个下拉列表框,我会在一个包含文件当中建立一个函数,样子如下所示:
  
  Function GetListBox(asSelectedItem)
  '为HTML的选择控件建立字符串
  '返回这个字符串
  End Function
  
  当然,这样的做法的确在一定程度上做到了重用,但是为了能做到更加通用性,你不得不要增加更多的参数。为了使得类似上面的你需要整理的代码得以正常工作是困难的,因为要达到提供它的通用性(可重用性),你大概不得不去修改这些已经存在的代码,以便使得他们也能在新的环境下正常工作。
  IIS5中的VBScript5.0增加了建立类的功能。这就使得我们可以通过一个较多面向对象的方式来实现可重用的代码。
  
  Class ComboBox
  Property Let ControlName(vData)
  .
  End Property
  <More properties and methods here>
  End Class
  
  这样做会稍微好一些,但是开发者仍旧需要被迫去编写那些函数,以便返回HTML代码。而且,他也没有能力操纵那些类的实例对象的事件。为了能做到操作事件,开发者不得不建立一些COM组件,而后者则增加了应用程序的额外的复杂度。
  
  有了ASP.NET,我们拥有了一个新的简单的工具来编写可重用的代码—用户控件。用户控件(也叫pagelets)提供了这样一种机制,他使得我们可以建立能够非常容易的被ASP.NET页面使用或者重新利用的代码部件。一个用户控件也是一个简单的ASP.NET页面,不过它可以被另外一个ASP.NET页面包含进去。在你的ASP.NET应用程序当中使用用户控件的一个主要的优点是用户控件的支持一个完全面向对象的模式,使得你有能力去捕获事件。而且,用户控件支持你使用一种语言编写ASP.NET页面其中的一部分代码,而使用另外的一种语言编写ASP.NET页面另外一部分代码,因为每一个用户控件可以使用和主页面不同的语言来编写。
  
  
  建立一个用户控件
  在建立你自己的用户控件之前,你也许想知道在你的web页面中哪些可见的对象是能够重用的好的候选者。能可能的是,你将会在你的站点上的不止一个页面上需要使用融合的用户控件。一旦你开始不断的思考你的控件的结构,你就已经做好的开始的准备。在我们的例子当中,我们将要建立一个简单的搜索的控件,用来搜索SQL Server2000中的数据库Northwind。我们的搜索控件可以使得开发者快速的为一个web页面增加搜索能力。
  
  建立用户控件的第一步是建立一个.ascx文件。这是用户控件需要的文件扩展名。在一个一个.ascx文件中不能包含head,form,或者body标签,因为包含此.ascx文件的.aspx文件已经包含了这些标签。一个.ascx文件只能包含方法,函数,以及和用户控件相关的内同。
  
  在建立一个.ascx文件之后,我们想要为用户控件增加一些可视的代码。在一个用户控件当中可以包含所有的web控件。在我们的例子当中,搜索控件需要拥有一个标签,一个文本框以及一个按钮。我们首先加入这些web控件,因为我们的整个代码当中会涉及到这些对象。下面是具体的代码:
  
  <asp:Label id=lblSearch runat="server" text="Caption"></asp:Label> 
  <asp:TextBox id=txtSearch runat="server"></asp:TextBox> 
  <asp:Button id=cmdSearch runat="server" Text="Search" ></asp:Button>
  
  在用户控件中有一件很酷的事情是,你可以定义你自己的属性。在我们的例子当中,我们会定义如下属性:
  
  。LabelText—描述显示给用户的搜索条件
  。ConnectiongString---用来联接到数据库的连接字符串
  。ResultSetView—包含了搜索结果的数据记录集
  。TableName—要搜索的数据库table名称
  。Condition—需要搜索的table的列的名称
  
  为了建立这些属性,我们使用一些联合起来的get和set方法来同属性结合起来。在做这些工作之前,我们需要首先决定一个属性是否需要允许读,写,还是两者都需要。对于只需要读的属性,我们将会使用ReadOnly关键字来限定属性的声明,并且仅仅包含了get方法。我们的ResultSetView属性是一个只读的属性,因此它的相关代码看起来如下:
  '这是一个只读的属性
  
  Public ReadOnly Property ResultSetView as dataView
  Get
  '设置返回属性地值
  ResultSetView = dsData.tables("BookTitles").defaultview
  End Get
  End Property
  
  对于只需要写的属性,我们将会使用WriteOnly关键字来限定属性的声明,并且仅仅包含了set方法。我们的TableName属性是一个只写属性,因此它的相关代码看起来如下:
  
  'This write only attribute identifies which table will be searched
  Public WriteOnly Property TableName as string
  Set
  '设置表的名称
  strTableName = Value
  End Set
  End Property
  
  对于那些既能读也能写的属性,在定义的时候就不需要加以限定了;并且同时包含了Get和Set方法。一旦这个属性被建立,.aspx文件就可以读取或者设置这些属性,使得用户控件可以适应一个或者多个用途了。
  
  在用户控件当中,和定义不同的属性相结合,你也需要定义任意的方法,这些方法可以被用户控件初始化。这些属性和方法定义了用户控件的功能。在我们的例子当中使用的是search方法。这个方法读取各个用户定义在.aspx文件中的控件属性,并且返回一个搜索的结果记录集。所有的操纵数据库的代码都在这个方法中了:建立SQL语句,打开数据库联接,并且从数据库中返回一个结果。
  
  '这个程序依照属性的值来操纵一个数据库
  Public Sub Search(sender As Object , e As System.EventArgs)
  Dim cnConnection As SQLConnection
  Dim cmdCommand As SQLDataSetCommand
  Dim strSearchString As String
  Dim strSQL As String
  '如果用户在搜索框中输入了条件
  If txtSearch.Text <> "" Then
  '过滤掉字符的前后空格
  strSearchString = trim$(txtSearch.Text)
  End If
  '建立我们的SQL语句
  strSQL = "SELECT * " & _
  "FROM " & strTableName & _
  " WHERE " & strConditionField & " LIKE '" & _
  trSearchString & "%'"
  '如果联接属性被设置了
  If strConnection <> "" Then
  '建立数据库联接
  cnConnection = New SQLConnection(strConnection)
  '打开数据库联接
  cnConnection.open()
  '为搜索建立一个新的command对象
  cmdCommand = New SQLDataSetCommand(strSQL, cnConnection)
  '建立一个新的DataSet对象
  dsData = New DataSet()
  '填充dataset对象
  cmdCommand.FillDataSet(dsData, "BookTitles")
  End If
  End Sub
  
  一旦你在你的用户控件当中添加了属性和方法,控件的开发也就大致完成了。
  现在我们对一个用户控件是如何建立的有了一个认识,让我们来看看用户控件是如何工作的。下面是我们的用户控件被包含在一个form当中的时候看起来的样子:
  
  
  
  我们的用户控件将会放在一个国际食物网站的一个搜索页面上。为了建立这个搜索页面,我们先建立一个空的.aspx文件。我们先安排好所有的图片和布局,之后加入我们的用户控件。
  为了能够在一个.aspx页面当中使用这个新的用户控件,你必须首先初始化@Register指令。当使用这个标签的时候,你必须定义标签前缀,标签名字以及指定用户控件所在的源文件。
  
  <%@ Register TagPrefix="jav" TagName="Search" src="SearchControl.ascx" %>
  
  TagPrefix定义了我们使用这个用户控件的时候想要用的名称空间。TagName定义了这个用户控件的实际名称。你可以任意的命名你的控件,这个名字将会用在页面上面标示用户控件。
  当你加入一个用户控件到一个.aspx页面的时候,相应的语法同加入一个web控件类似。你首先使用标签前缀和标签名称来标示用户控件:
  
  <jav:search></jav:search>
  
  现在我们在页面上面有了这个空间,我们可以设置标准的runat和id属性,以及设置我们以前建立控件的时候建立的各个自己定义的属性。有两种方法来修改这些用户控件的属性(就像针对一个ASP.NET的web控件那样)。一种方法是在你的web页面当中引用这个用户控件的时候明确的设置它的各个属性的值。在我们的例子当中,我们设置LabelText属性为“Product Name”,因为我们的搜索是针对产品名称来讲的。
  
  <jav:search id="UserControl" runat="server" labeltext="Product Name"></jav:search>
  
  另外一种方法是在一个.aspx文件的page_load事件中设置这些用户控件的属性。针对我们的例子,我们在page_load事件当中设置ConnectionString,TableName,ConditionField属性。我们需要搜索的是数据库Northwind中Product表的ProductName字段。
  
  Sub page_load(objSource as Object, objArgs as eventArgs)
  Dim htConfig As HashTable
  '设置一个对Config.web文件中AppSettings节点的应用
  htConfig = Context.GetConfig("appsettings")
  
  '设置用户控件的连接字符串
  userControl.ConnectionString=(htConfig("MyConn"))
  
  '设置我们要搜索的表的名称
  userControl.TableName="Product"
  
  '设置我们要搜索的字段名称
  userControl.ConditionField="ProductName"
  对于我们的web站点,我们将数据库的连接字符串存放在Config.web文件当中的叫做appsettings中的区域中。(如果要使用下面的代码,请将server修改成你实际的server名字)
  <appsettings>
  <add key="MyConn"value="server=ServerName;uid=sa;pwd=;
  database=Northwind"/>
  </appsettings>
  
  下面是我们的.aspx文件第一次看起来的样子:
  
  
  
  现在我们需要加入代码来调用我们的用户控件中的search方法。我们编写这个用户控件的例子的目的是为了实现对数据库的简单搜索以及返回搜索的结果。为了做到这些,我们有两个选择,我们要么在我们的用户控件当中将我们的结果放到我们的结果控件(在这里,一般是一个DataGrid控件),要么我们将一个ADO记录集当作一个属性返回给开发者,而不必关心开发者究竟使用什么方法来显示他。我们的选择是通过一个属性返回一个记录集结果,因为这样做可以使得开发者可以自由的选择使用什么控件以及采用什么样的数据显示方式。
  然而这个选择同时也带给了我们一些问题。我们可以容易的将结果当作一个属性返回并且使用DataSource属性绑定到一个DataGrid控件或者其他的控件。但是,我们如何才能知道用户是否是点击了一个搜索按钮呢?为了解决这个问题,我们需要在page_load事件中使用Page.IsPostBack这个属性。如果一个页面是由于post而重载的话,属性Page.Ispostback的值等于true。通过检测page.ispostback是否等于true,我们可以决定是否调用我们的用户控件中的Search方法,然后将结果绑定到我们的datagrid。
  
  '检测Page.IsPostBack属性的值
  If page.IsPostback = true then
  '执行搜索的动作
  userControl.Search(objSource, objArgs)
  '将结果绑定到DataGrid控件上面
  grdGrid.datasource = userControl.ResultSetView
  '正式绑定数据
  grdGrid.databind()
  End If
  End Sub
  在某个人输入了一个搜索条件之后并提交我们的.aspx文件之后的显示页面:
  
  
  
  现在我们可以同样的建立另外一个页面以便使用在我们的站点。我们将要建立的这第二个页面同样执行一个搜索动作,但是这次是要在Northwind数据库的表Company上的CompanyName字段上面进行搜索匹配。为了建立这个页面,我们建立一个新的空白.aspx文件。既然这个页面和我们的产品页面类似,我们使用相同的布局。我们将要再一次使用搜索用户控件。
  
  
  
  我们在这个页面会将属性设置不同的值。联接字符串还是保留使用前面同样的值。我们需要设置属性LabelText的值等于Company Name,设置属性Table的值等于Company,设置属性ConditionField的值等于CompanyName。通过对布局和用户控件的略微改动,我们就算大致完成了这个页面。对这个页面来讲,我们只需要很少的代码,这要好好谢谢用户控件带来的代码重用了。下面就是我们新的页面:
  
  
  
  正如你所看到的,用户控件可以提供一个简便的方法来实现代码的可重用性,而省去了很多不必要的麻烦。将相关的控件和代码从一个ASPX文件移到一个ASCX文件当中是一个恰当的做法,并且只需要较小的修改就可以使得代码正常的工作了。
  
  局限性?
  你也许会问自己:我使用用户控件不能够做到什么?使用这个技术只存在很少的一些限制。
  其中的一个限制是:用户控件不支持模版。因此,你不能建立一个用户控件来达到ASP.NET中提供的Data Repeater控件的功能。
  另外的一个限制是:由于用户控件必须包含一些静态的UI(用户界面)属性,所以你不能够按照你的想法严格的调整他们。比如,你可能想要建立一个包含多个控件的用户控件,并且允许开发者能够指定这些控件在页面上的显示顺序。上面的想法对于一个用户控件来说是困难的,因为UI块是被静态的设置的。
  
  结论
  用户控件提供了一个极好的方法使得你能够非常容易的在你的ASP.NET页面中实现代码的重用。将一些在ASP.NET中的代码拖放到ASCX文件中使得他们能够被重新利用是个正确的选择和做法。
  在我们的文章中,我们一同探讨了通过定制的控件实现代码在ASP.NET中的重用。可定制的ASP.NET控件可以对可重用代码提供附加的弹性,正如上面我们已经学到那样。

相关文章:

liunx 下dhcp中继及服务器配置

dhcp:动态主机配置协议 使用udp协议 端口为67&#xff08;服务&#xff09;&#xff0c;68&#xff08;客户&#xff09; 作用&#xff1a;动态分配地址等参数 工作模式 1. 手工 manual server—地址池 &#xff08;ip—mac&#xff09; 2222----1.1.1.1 dhcpclient ------地址…

PyCharm vs VSCode,是时候改变你的 IDE 了!

作者 | Sohaib Ahmad译者 | 鹿未来&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;也许是我有些落伍&#xff0c;或者也是因为JetBrains在Python IDE的市场上占有很大的份额&#xff0c;以至于直到最近我才发现&a…

(转)Linux 下 查看以及修改文件权限

场景&#xff1a;Linux环境下远程部署项目&#xff0c;发现因为文件权限问题&#xff0c;不能执行远端的可执行文件。问题还没解决&#xff0c;待议。。。 1 查看权限 在终端输入: ls -l xxx.xxx &#xff08;xxx.xxx是文件名&#xff09; 那么就会出现相类似的信息&#…

软件文档知多少?

作者&#xff1a;由于本人在无数网站看到此文 无法确定第一作者 请作者与本人联系如今&#xff0c;软件开发越来越复杂&#xff0c;软件功能也越来越丰富。而几乎所有成熟的商业软件&#xff0c;都是靠一个开发团队齐心协力的血汗结晶。“罗马不是一天建成的&#xff01;”&…

在 VMware ESXi 5.0 上安装万兆网卡驱动

2012年02月28日 | 标签: vmware esxi | 作者&#xff1a;vpsee 转载自&#xff1a;http://www.vpsee.com/2012/02/intall-network-card-driver-on-vmware-esxi-5-0/ 昨天刚发现新购的 Dell PowerEdge R710 服务器上配的 Intel Ethernet Server Adapter X520-T2 万兆网卡居然在…

漫谈 ClickHouse 在实时分析系统中的定位与作用

ClickHouse 是一款由俄罗斯Yandex公司开源的OLAP数据库&#xff0c;拥有着卓越的性能表现&#xff0c;在官方公布的基准测试中&#xff0c;ClickHouse的平均响应速度是Vertica的2.63倍、InfiniDB的17倍、MonetDB的27倍、Hive的126倍、MySQL的429倍以及Greenplum的10倍。自2016年…

Js+Dhtml:WEB程序员简易开发工具包(预先体验版)

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<HTML> <HEAD> <META http-equivContent-Type contenttext/html;charsetgb2312> <META nameGemeratpr content网络程序员伴侣(Lshdic)2005_开拓版> <TITLE>LD5工具</TITLE> <st…

残差网络的前世今生与原理 | 赠书

本文内容节选自《深度学习之模型设计&#xff1a;核心算法与案例实践》&#xff0c;作者言有三。本书详解了数十年来深层卷积神经网络模型的主流设计思想&#xff0c;理论讲解细致&#xff0c;实战案例丰富&#xff0c;是熟练掌握深度学习模型使用的必备参考资料。想要了解关于…

python---简单数据库

2019独角兽企业重金招聘Python工程师标准>>> #simple database#people people {Alice:{phone:2341,addr:Foo drive 23},Beth:{phone:9102,addr:Bar street 42},Ceil:{phone:3158,addr:Baz avenue 90} }#describe labels {phone:phone number,addr:address }name …

Linux系统之路——如何在CentOS7.2安装MySQL

一、Mysql 各个版本区别&#xff1a;1、MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。2、MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;可以试用30天。3、MySQL Cluster 集群版&#xff0c;开源免费。可将几个M…

Vml+Dhtml:制作一个应用渐变颜色效果不错的进度条

//原作:风云舞,载自: http://www.lshdic.com/bbs<HTML xmlns:v> <HEAD> <META http-equivContent-Type contenttext/html;charsetgb2312> <Meta nameGemeratpr content网络程序员伴侣(Lshdic)2004> <TITLE>效果不错的VML进度条</TITLE> &l…

使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)

; 脚本由 Inno Setup 脚本向导 生成&#xff01;; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档&#xff01;#define MyAppName "小小鸟软件"#define MyAppVersion "2012.2.29"#define MyAppPublisher "小小鸟科技"#define MyAppURL &…

GPT-3到来,程序员会被AI取代吗?

作者 | Frederik Bussler译者 | 弯月&#xff0c;编辑 | 屠敏题图 | 自东方 IC出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;2017年的时候&#xff0c;曾有研究人员问&#xff1a;到2040年人工智能是否承担起大多数的编程工作&#xff1f;如今OpenAI的G…

iOS开发几年了,你清楚OC中的这些东西么!!!?

iOS开发几年了,你清楚OC中的这些东西么!!!? 前言几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1.2发布后就正式并且一直都使用了swift进行iOS的开发了, 之后就是对swift持续不断的学习, 近来swift3.0的发布, 更多的…

在做会员资料修改时,实现下拉菜单的默认项定位

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/ <!--在写一个交友网站时碰到的问题,就是当会员修改资料时&#xff0c;如何定位SELECT的菜单列默认项&#xff0c;不过很容易就解决了--> <HTML> <HEAD> <META http-equivContent-Type contenttex…

NFS 文件共享的创建过程

nfs 文件共享的服务器 nfs服务需要两个软件包nfs-utils和portmap 启动nfs服务 # service portmap start # service nfs start # chkconfig nfs on 开机自动启动 配置文件&#xff1a; /etc/exports 想要共享某个文件则编辑配置文件 共享目录 共享IP&#xff08;共享属性&…

行业新风向!AI人才缺口30万,单个项目最高补贴1000万元!

最近&#xff0c;程序员届有一个重大好消息&#xff0c;可能很多人还不知道&#xff0c;那就是&#xff1a;国内某些城市已经开始程序员人才补贴了&#xff01;对于人工智能公司的项目开发、人才引进、科技研发&#xff0c;最高按照国拨经费的30%给予配套支持&#xff0c;单个项…

Robotium todolist.test.elements

2019独角兽企业重金招聘Python工程师标准>>> ElementsEditToDoItemActivity package com.example.todolist.test.elements;import android.widget.Button; import android.widget.EditText;import com.example.todolist.R; import com.robotium.solo.Solo;public cl…

经典的导航二级式导航菜单增强版

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<!--呵呵我发的上一版相信大家都看过了吧&#xff0c;想一想上一版的确是不怎么华丽&#xff0c;而且上一版是针对表格内的连接A而定位的而这一版的优点显然比上一版要华丽&#xff0c;速度一样快&#xff0c;而且是针…

【海洋女神原创】installshield 32位打包和64位打包的注意事项

32/64位问题要把握几点&#xff1a;1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解InstallShield Build出来的安装包本身是32位应用程序4. 了解Windows 64位系统上的32位路径和64位路径差异以及如何在InstallShield的系统变量中找到对应的…

如何提高模型性能?这四大方法值得尝试 | CSDN 博文精选

作者 | BoCong-Deng编辑 | 屠敏封图 | 自东方 IC出品 | CSDN 博客写在前面在我们进行模型训练时&#xff0c;如果你只是想要让模型具有不错的性能&#xff0c;那么盲目地尝试网络架构足以达到目的。而在本文中&#xff0c; 我们将为你提供一套用于构建最先进深度学习模型的必备…

ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程

1、副总裁需要裸恢复的严峻现实 集团总部的信息部负责人给我打电话说为了找一年前的记录&#xff0c;所以需要对一年前2015年5月1日的数据进行恢复。而2016年初因为进行迁移&#xff0c;所以有些文件可能丢失&#xff0c;手上只有rman全备文件&#xff0c;希望在一天之内找回&a…

C语言文件等题

1.#include <stdio.h>double fun(int n){ }main(){ int n; double s; printf("\nInput n: "); scanf("%d",&n); sfun(n); printf("\n\ns%f\n\n",s); NONO();}NONO(){/* 请在此函数内打开文件&#xff0c;输入测试数据&…

使用 Vml 制作立体柱状投票统计图的完整程序

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<!--以下便是完整的 JsVml 制作柱状投票统计图的完整程序,保存为HTM文件运行即可看到效果其中 array数组中的分组可以为6个也可以为2&#xff0c;3&#xff0c;4&#xff0c;5个等,运行以下程序需要您的浏览器支持VML…

Python, C++和Java代码互翻,Facebook开发首个自监督神经编译器

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;将早期的编程语言&#xff08;例如COBOL&#xff09;的代码库迁移到现在的编程语言&#xff08;例如Java或C&#xff09;是一项艰巨的任务&#xff0c;它需要源语言和目标语言方面的专业知识。COBOL如今仍在…

pinpoint的id的生成

traceId的生成 public String getTransactionId() {return TransactionIdUtils.formatString(agentId, agentStartTime, transactionSequence);}public static final String TRANSACTION_ID_DELIMITER "^";public static String formatString(String agentId, long …

X@X.X域名转向的实现

www.chinacs.net 中文C#技术站 当你看到csdncsdn.com时&#xff0c;你肯定把这当作电子邮件地址&#xff0c;其实这个不一定是邮件地址&#xff0c;有可能是域名。现在有越来越多的人开始使用这个形式的地址了。初看起来&#xff0c;你不要以为这个是一个什么非常了不起的技术&…

GPT-3 的到来,程序员会被 AI 取代吗?

无需任何训练&#xff0c;AI可用任何语言编程。作者 | Frederik Bussler译者 | 弯月&#xff0c;责编 | 晋兆雨头图 | CSDN 下载自东方 IC来源 | CSDN以下为译文&#xff1a;2017年的时候&#xff0c;曾有研究人员问&#xff1a;到2040年人工智能是否承担起大多数的编程工作&am…

iphone 下拉刷新控件 EGORefreshTableHeaderView 手动显示更新

参考资料:http://blog.csdn.net/ugg/article/details/7283661 在它基础上进行修改 EGORefreshTableHeaderView 绝对是ios开发中的必选插件,其用法就不再赘述. 为了能够手动的显示更新界面而不是要等到用户实际拖动才触发(比如程序刚启动时), 通过阅读它的代码可以发现,只要自己…

Eclipse create git repository failure(egit)

2019独角兽企业重金招聘Python工程师标准>>> 启动和创建的时候会出现这样的异常信息&#xff0c;具体处理办法如下&#xff1a; cd /path/to/yourRepo.git cd .. mkdir yourRepo mv yourRepo.git yourRepo cd yourRepo git config --local --bool core.bare false g…