Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: lerthe61
Дата сообщения: 20.07.2011 14:37
StanFreeWare
К саожалению вы не сообщили версию фреймворка которую используете, но подобное можно решить при помощи Generics (и расширений), будет выглядеть примерно так:

Код:
public static class Extensions
{
public static T TryRestore<T>(this T entity, string fileName)
where T : BaseData
{
T result = null;
if (File.Exists(fileName))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StreamReader reader = new StreamReader(fileName))
{
result = serializer.Deserialize(reader) as T;
}
}
return result;
}
}
Автор: StanFreeWare
Дата сообщения: 21.07.2011 09:26
lerthe61
Огромное спасибо, это работает!
Правда, не совсем понял, зачем нужен первый параметр - entity в случае TryRestore?
C таким entity должна быть статическая фукнция сериализации, если вставить ее в тот же класс Extensions.
Даже получилось вообще отказаться от базового класса BaseData:


Код: public static class Extensions
{
public static void SerializeToXml<T>(T entity, string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StreamWriter writer = new StreamWriter(fileName))
{
serializer.Serialize(writer, entity);
}
}

public static T TryRestore<T>(string fileName)
where T : class
{
T result = null;
if (File.Exists(fileName))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StreamReader reader = new StreamReader(fileName))
{
result = serializer.Deserialize(reader) as T;
}
}
return result;
}
}
Автор: lerthe61
Дата сообщения: 22.07.2011 10:29
StanFreeWare
Вы правы, entity в случае с TryRestore было явно лишне
А ключевое слово this добавляется для того, что бы была возможность вызывать метод как будто он реализован в классе который идет после. Вот как это выглядит:
http://msdn.microsoft.com/ru-ru/library/bb383977.aspx
Автор: StanFreeWare
Дата сообщения: 22.07.2011 16:09
lerthe61
Попробовал this. Веселая штуковина ))
Автор: PrWork1
Дата сообщения: 01.08.2011 22:00
Подскажите, куда копать..
Нужно на странице в IE сделать грид с данными из акесса.
На .NET.
Как проще и быстрее сделать?



Автор: Mextrom
Дата сообщения: 02.08.2011 08:27
PrWork1

Цитата:
Подскажите, куда копать..
Нужно на странице в IE сделать грид с данными из акесса.
На .NET.
Как проще и быстрее сделать?

Посмотрите здесь.
Автор: pain205
Дата сообщения: 08.08.2011 18:28
Я только начал изучать C #. Пишу специальный калькулятор.
Подскажите пожалуйста как сделать, чтобы при вводе в поле textBox вводились только цифры? Или из этого поля переменной присваивалось только значения типа double? Проблема в том, что при вводе, например, 12.1 (а не 12,1) происходит ошибка при расчётах. Заранее спасибо.
Автор: Molniev
Дата сообщения: 08.08.2011 19:47

Цитата:
Подскажите пожалуйста как сделать, чтобы при вводе в поле textBox вводились только цифры?

Через PreviewKeyDown, выставляя
Код: e.IsInputKey = false;
Автор: BlackVetal
Дата сообщения: 09.08.2011 05:44
pain205
Попробуй использовать не TextBox а MaskedTextBox - у этого контрола есть возможность выбора маски ввода либо из уже готовых либо самому написать (а это уже в MSDN читать )
Автор: pain205
Дата сообщения: 11.08.2011 11:08
Спасибо!
Автор: pain205
Дата сообщения: 12.08.2011 13:16
Подскажите, как сделать так, чтобы при переходе в форме от одного textBox к другому с помощью Tab выделялось всё содержимое texBox к которому перешли?
Автор: KChernov
Дата сообщения: 12.08.2011 20:54
pain205
Наверное можно это прописать в onSelect.
Автор: dneprcomp
Дата сообщения: 12.08.2011 21:42
pain205

На GotFocus event textBox
[имя textBox).SelectionStart = 1
[имя textBox).SelectionLength = Len([имя textBox).text

или просто использовать число, гарантированно перекрывающее максимально возможную длину текста

[имя textBox).SelectionLength = 500

На LostFocus event textBox
[имя textBox).SelectionLength = 0
Автор: Drozdov_Sergei
Дата сообщения: 25.08.2011 14:22
Подскажите как на форму интегрировать SWF файл.
Автор: May_Johnson
Дата сообщения: 28.08.2011 13:36
Drozdov_Sergei
http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cb0.html
Автор: Cyril Konst
Дата сообщения: 01.09.2011 13:36
Здравствуйте. Подскажите компоненту для .NET для работы с голосовым модемом. Нужно проигрывать в линию wave-файл.
Автор: Mextrom
Дата сообщения: 02.09.2011 08:54
Cyril Konst
Посмотрите здесь или здесь. Команды модема можно посмотреть в вики - статья на английском "Voice modem command set".
Автор: Cyril Konst
Дата сообщения: 02.09.2011 13:55
Mextrom
спасибо большое
Автор: Forslay
Дата сообщения: 14.09.2011 23:18
Ребята, я так и не понял формат записи реестра воспринимаемый компилятором.


Вот это пример формата записи, который воспринимает компилятор Inno Setup (Delphi, Pascal).


Код: Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: CrashInitializingVideoMode; ValueData: $00000000
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenWindowed; ValueData: $00000000
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenBPP; ValueData: $00000020
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: EngineD3D; ValueData: $00000000
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenHeight; ValueData: $00000300
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenWidth; ValueData: $00000400
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: EngineDLL; ValueData: hw.dll
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: Language; ValueData: english
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: Rate; ValueData: 25000
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: LastGameNameUsed; ValueData: WCG Participant
Автор: May_Johnson
Дата сообщения: 16.09.2011 02:37
Forslay


RegistryKey root = Registry.CurrentUser;
RegistryKey key = root.OpenSubKey(@"Software\Valve\Half-Life\Settings", true);
if (key == null)
{
key = root.CreateSubKey(@"Software\Valve\Half-Life\Settings");
}

key.SetValue("CrashInitializingVideoMode", 0, RegistryValueKind.DWord);
Автор: Forslay
Дата сообщения: 17.09.2011 21:49
May_Johnson, Спасибо большое. В итоге у меня получилось так:


Код:

private void button2_Click(object sender, EventArgs e)
{

RegistryKey Settings = Registry.CurrentUser;
RegistryKey String = Settings.OpenSubKey(@"Software\Valve\Steam", true);
if (String == null)
{
String = String.CreateSubKey(@"Software\Valve\Steam");
}

String.SetValue("EngineDLL", "hw.dll", RegistryValueKind.String);
String.SetValue("Language", "english", RegistryValueKind.String);
String.SetValue("Rate", "25000", RegistryValueKind.String);
String.SetValue("LastGameNameUsed", "WCG Participant", RegistryValueKind.String);

Settings.Close();


RegistryKey Options = Registry.CurrentUser;
RegistryKey DWord = Options.OpenSubKey(@"Software\Valve\Half-Life\Settings", true);
if (DWord == null)
{
DWord = DWord.CreateSubKey(@"Software\Valve\Half-Life\Settings");
}

DWord.SetValue("CrashInitializingVideoMode", "$00000000", RegistryValueKind.DWord);
DWord.SetValue("ScreenWindowed", "$00000000", RegistryValueKind.DWord);
DWord.SetValue("ScreenBPP", "$00000020", RegistryValueKind.DWord);
DWord.SetValue("EngineD3D", "$00000000", RegistryValueKind.DWord);
DWord.SetValue("ScreenHeight", "00000300", RegistryValueKind.DWord);
DWord.SetValue("ScreenWidth", "$00000400", RegistryValueKind.DWord);

Options.Close();

}

Автор: ItsJustMe
Дата сообщения: 17.09.2011 22:15
Forslay
Полагаю, запускать вы это не пробовали Иначе бы уже исправили свой баг.

Код: DWord.SetValue("CrashInitializingVideoMode", "$00000000", RegistryValueKind.DWord);
Автор: Forslay
Дата сообщения: 19.09.2011 11:14
ItsJustMe, Да запускать не пробовал. =)

Был сонный, не проверил.

Пришёл к такому виду.

Код:
RegistryKey Options = Registry.CurrentUser;
RegistryKey DWord = Options.CreateSubKey(@"Software\Valve\Half-Life\Settings");

DWord.SetValue("CrashInitializingVideoMode", 0, RegistryValueKind.DWord);
DWord.SetValue("ScreenWindowed", 0, RegistryValueKind.DWord);
DWord.SetValue("ScreenBPP", 32, RegistryValueKind.DWord);
DWord.SetValue("EngineD3D", 0, RegistryValueKind.DWord);
DWord.SetValue("ScreenHeight", 768, RegistryValueKind.DWord);
DWord.SetValue("ScreenWidth", 1024, RegistryValueKind.DWord);
DWord.SetValue("EngineDLL", "hw.dll", RegistryValueKind.String);

RegistryKey Settings = Registry.CurrentUser;
RegistryKey String = Settings.CreateSubKey(@"Software\Valve\Steam");

String.SetValue("Language", "English", RegistryValueKind.String);
String.SetValue("Rate", "25000", RegistryValueKind.String);
String.SetValue("LastGameNameUsed", "WCG Participant", RegistryValueKind.String);
Автор: DmitryP
Дата сообщения: 19.09.2011 15:07
Доброе время суток,
У меня есть такой вопрос. Существует класс System.Windows.Forms.SaveFileDialog, у него есть ивент HelpRequest. При открытом окне SaveFileDialog, при нажатие Ф1 открывается дефолтоый хелп, про то, как сохранять файлы. Вопрос: как поменять метод который запускается ивентом HelpRequest?
По идее это должно быть, что то в таком роде:
SaveFileDialog sfd = new SaveFileDialog();
sfd.HelpRequest -= xxxxxxxx;
sfd.HelpRequest += new EventHandler(sfd_HelpRequest);

xxxxxxxx - это метод, названия которого я не знаю, открывающий дефолтовый хелп.
Автор: MrZeRo
Дата сообщения: 20.09.2011 11:16
DmitryP
А обязательно ли его знать (их может быть и несколько ...)? Нельзя ли написать просто
sfd.HelpRequest = new EventHandler(sfd_HelpRequest);
?
Автор: Sp44
Дата сообщения: 20.09.2011 12:31
MrZeRo,

вообще то применять "=" для привязки обработчика событий M$ крайне не советует.
Автор: DmitryP
Дата сообщения: 21.09.2011 12:37
MrZeRo
Sp44

Цитата:
вообще то применять "=" для привязки обработчика событий M$ крайне не советует.

Не то, что не советует, это просто ошибка при компиляции.
Автор: akaGM
Дата сообщения: 22.09.2011 02:00
правильно ли я понимаю прототип шарпа
internal static extern double foo(double d1, double d2);

как Сишный аналог
double foo(double d1, double d2);

static и extern меня естественно не волнует...

даже уточняю...
передача параметров здесь точно по значению, а не по ссылке?
?

Автор: DmitryP
Дата сообщения: 22.09.2011 10:05
akaGM

Цитата:
internal static extern double foo(double d1, double d2);


Цитата:
передача параметров здесь точно по значению, а не по ссылке?

По значению. Что бы передать по ссылку (by reference) это должно выглядеть так:
internal static extern double foo(ref double d1, ref double d2);
при вызове foo, ref тоже пишется :
foo(ref d1, ref d2);
Автор: akaGM
Дата сообщения: 22.09.2011 10:48
DmitryP
отлично, спасибо...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.