Независимо от того, выбран ли какой-либо текст, , свойство SelectionStart представляет индекс в текст, где Вы каре сидите. Таким образом, можно использовать Строка. Вставьте для введения некоторого текста, как это:
myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world");
Если вы используя C # 3.0, вы можете предоставить свои вспомогательные методы в качестве методов расширения для класса System.Web.UI.Control
, из которых оба System.Web.UI.Page
и Классы System.Web.UI.UserControl
являются производными.
public static class ControlExtensions {
public static void DoSomething(this Control obj) {
// do something
}
}
На странице
или UserControl
:
this.DoSomething();
Хм ... звучит как использование известных классов Helper, в основном таких классов, как
public static class StringHelper
{
public static string Replace(...)
{
...
}
}
, и называть их как
string x = StringHelper.Replace(...);
Хотя я часто очень беспокоюсь о том, чтобы многие из этих помощников, потому что они действительно каким-то образом запоминают процедурное программирование со статическими методами в них. С другой стороны, функциональные возможности, которые вы описываете (в некоторых базовых классах, расширяющих UserControl и Page), обычно относятся к этому типу.
В этом случае я часто использую StringHelper и соответствующий StringExtender, логика которого внутри вызывает статические методы класса Helper. Таким образом, вы можете использовать функциональные возможности с новыми методами расширения C # или, как обычно, напрямую через статический класс.
в основном классы, такие какpublic static class StringHelper
{
public static string Replace(...)
{
...
}
}
, и вызывающие их, как
string x = StringHelper.Replace(...);
. Хотя я часто очень обеспокоен наличием слишком большого количества этих помощников, потому что они действительно каким-то образом запоминают процедурное программирование со статическими методами в них. С другой стороны, функциональные возможности, которые вы описываете (в некоторых базовых классах, расширяющих UserControl и Page), обычно относятся к этому типу.
В этом случае я часто использую StringHelper и соответствующий StringExtender, логика которого внутри вызывает статические методы класса Helper. Таким образом, вы можете использовать функциональные возможности с новыми методами расширения C # или, как обычно, напрямую через статический класс.
в основном классы, такие какpublic static class StringHelper
{
public static string Replace(...)
{
...
}
}
, и вызывающие их, как
string x = StringHelper.Replace(...);
. Хотя я часто очень обеспокоен наличием слишком большого количества этих помощников, потому что они действительно каким-то образом запоминают процедурное программирование со статическими методами в них. С другой стороны, функциональные возможности, которые вы описываете (в некоторых базовых классах, расширяющих UserControl и Page), обычно относятся к этому типу.
В этом случае я часто использую StringHelper и соответствующий StringExtender, логика которого внутри вызывает статические методы класса Helper. Таким образом, вы можете использовать функциональность с новыми методами расширения C # или, как обычно, напрямую через статический класс.
такие функциональные возможности, как вы их описываете (в некоторых базовых классах, расширяющих UserControl и Page), обычно относятся к этому типу.В этом случае я часто использую StringHelper и соответствующий StringExtender, логика которого внутри вызывает статические методы Helper учебный класс. Таким образом, вы можете использовать функциональные возможности с новыми методами расширения C # или, как обычно, напрямую через статический класс.
такие функциональные возможности, как вы их описываете (в некоторых базовых классах, расширяющих UserControl и Page), обычно относятся к этому типу.В этом случае я часто использую StringHelper и соответствующий StringExtender, логика которого внутри вызывает статические методы Helper учебный класс. Таким образом, вы можете использовать функциональные возможности с новыми методами расширения C # или, как обычно, напрямую через статический класс.
У меня точно такая же проблема. Вот мое решение.
Я определил пустой интерфейс
public interface ISecurableWebObject
{
}
Затем я определил класс, у которого есть методы расширения для интерфейса выше
public static class ISecurableWebObjectExtender
{
public static bool ExtensionMetotX(this ISecurableWebObject obj)
{
return ...;
}
}
Я унаследовал ISecurableWebObject в классах Page и WebUserControl, поэтому дублируемое определение исчезло.
public partial class UcExample : System.Web.UI.UserControl, ISecurableWebObject
{
protected void Page_Load(object sender, EventArgs e)
{
if(this.ExtensionMetotX() == true)
{ ... }
}
}