Сборник часто задаваемых вопросов и ответов


Мы начинаем собирать наиболее часто задаваемые в форумах вопросы и ответы. Пока их немного, но мы постоянно будем добавлять новые. По мере накопления вопросов и ответом планируем создать отдельные FAQs по каждому форуму.
Если у Вас есть пожелания по включению вопроса/ответа в FAQ - пишите пожалуйтста на info@gotdotnet.ru.



1. Как можно добавить новый узел в xml файл?

//reading xml file
XmlDocument doc = new XmlDocument();
doc.Load(sFileName);

// searching the node
sXPath = "Users";
oNode = doc.SelectSingleNode(sXPath);
if ( oNode != null )
{
    //Creating new node
    // User element
    XmlElement eUser = doc.CreateElement("User");
    // Name element
    XmlElement eName = doc.CreateElement("Name");
    // Appending
    eUser.AppendChild(eName);
    oNode.AppendChild(eUser);
}

2. Сохранение в XML-файл?

//reading xml file
XmlDocument doc = new XmlDocument();
doc.Load(sFileName);

// searching the node
XmlNode oNode = doc.SelectSingleNode(sXPath);
if ( oNode != null )
{
    // updating the Text
    oNode.InnerText = sNewValue;

    // saving
    doc.Save(sFileName);
}

3. Как проигрывать WAV-файл?

Такой возможности в .NET пока нет. Поэтому нужно импортировать что-нибудь из Win32 API, например PlaySound.

[System.Runtime.InteropServices.DllImport("Winmm.dll")]
public static extern int PlaySound(string pszSound, IntPtr hMod, long fdwSound);
const long SND_FILENAME = 0x00020000L;

//использование:
PlaySound("1.wav", IntPtr.Zero, SND_FILENAME);

4. Если задать BorderStyle.FixedSingle, то контрол опоясывает однопиксильная черная линия. Есть в природе какой-нибудь способ задать цвет этой линии?

Поставьте BorderStyle в BorderStyle.None затем подпишитесь на Paint и в нем при помощи класса ControlPaint отрисуйте нужный бордер.

void panel_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, ((Control)sender).ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
}

5. Форматирование даты в контролах?

<%#(Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "MyDateField"))).ToString("dd.MM.yyyy")%>

6. Ошибка при установке студии?
После ввода номера жду пока там пишет Validating Install order... Please wait.... Потом выпадает Setup Failed.

инсталяция не идет из-за того что в наименовании организации на которую зарегистрирована винда более одного слова ! Я изменил в реестре ОАО "Баня" на Баня и все пошло

7. Как получить список таблиц из БД через ADO.NET?

OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"});

8. Использование COMпонентов при помощи .NET?

Использование COMпонентов при помощи .NET

9. Как получить SID пользователя?

string queryString = "SELECT * FROM Win32_UserAccount WHERE Name = '" + SystemInformation.UserName + "'";
ManagementObjectSearcher userAccounts = new ManagementObjectSearcher(queryString);
foreach(ManagementObject userAccount in userAccounts.Get())
MessageBox.Show(userAccount.GetPropertyValue("SID").ToString()); 

10. Как создать в реестре параметр типа DWORD?

Dim CmdVisLines as RegistryKey
If registry..CurrentUser("Software\Prog1\Parametrs\")=Nothing then
CmdVisLines=RegistryKey.CreateSubKey("Software\Prog1\Parametrs")
end if

Dim intValue as System.Int32
intValue = 1
CmdVisLines.SetValue("CmdVisLines", intValue)

11. Как перерисовать иконку с помощью DrawIcon из полученного хендла в свой PictureBox?

Icon icon = Icon.FromHandle(hIcon);
...
graphics.DrawIcon(icon, 0, 0);

12. Как получить handle окна?

System.Diagnostics.Process.GetCurrentProcess().Handle

13. SDI/MDI в .Net?

У формы есть свойства Form.IsMdiContainer и Form.MdiParent.

14. Как сделать Splash Screen?

Splash Screen Example

15. Проблемы с кодировкой?

Пропиши в Web.config вот это:

<globalization
fileEncoding="windows-1251"
requestEncoding="windows-1251"
responseEncoding="windows-1251"
culture="ru-RU"
uiCulture="ru-RU"
/>

16. Пример TabStrip?

Tab Strip Control High Quality

17. Как получить размер рабочей области объекта DataGrid?

Ширина считается по формуле:

this.ClientSize.Width - <ширина рамки с обеих сторон> - SystemInformation.VerticalScrollBarWidth
<ширина рамки с обеих сторон> считается с помощью такой процедуры:
switch( this.BorderStyle )
{
case BorderStyle.FixedSingle:
_size_Border = SystemInformation.BorderSize;
break;
case BorderStyle.Fixed3D:
_size_Border = SystemInformation.Border3DSize;
break;
default:
_size_Border = Size.Empty;
break;
}
После чего в _size_Border.Width - ширина рамки с одной стороны.

18. Есть ли в классах .NET какой-нибудь выполняющий функции аналогичные вызову ShellExecute в WinAPI?

Process.Start()

19. Как вставлять картинки в DataGrid?

Нужно написать свой DataGridColumnStyle, переписать несколько методов (основной, конечно - Paint).
Пример

20. Сортировка в DataGrid?

<asp:BoundColumn HeaderText="Имя" SortExpression="Name" DataField="Name" />
Более подробную информацию можно найти здесь.

21. Как сделать собственную пиктограмму на панели инструментов?

Очень просто - задать классу атрибут ToolboxBitmap.

[ToolboxBitmap(typeof(CListView), "ListView.ico")]
public class CListView : ListView
Последовательность действий при добавлении своей пиктограммы к компоненту выглядит так:
  1. Добавить иконку в проект как "embedded resource".
  2. Задать классу атрибут "ToolboxBitmap".
  3. Удостовериться, что свойство проекта "Default Namespace" соответствует пространству имен искомого класса.
  4. Перекомпилировать проект.

22. При разработке использую тэг для самодокументирования <summary>. Как сделать так, чтоб они были видны, если сборку подключить к другой?

Нужно использовать опцию /doc:file для C# компилятора.
Для этого в свойствах проекта assembly, которую потом будешь использовать, добавь строку "<имя assembly>.xml" в поле Configuration Properties\Build\XML Documentation File.
И потом этот XML файл должен находиться в той же директории где и assembly (на которую ссылешься из проекта). В этом случае IntelliSence работает.

23. Как нарисовать треугольник(стрелку), показывающий направление сортировки в ListView при нажатии на ColumnHeader?

Нарисовать треугольник в ColumnHeader у ListView

24. Как загрузить картинки из датасета?

Response.ContentType = myDataReader.Item("PictContent")
Response.BinaryWrite(myDataReader.Item("picture"))

25. Как отследить нажатие клавиши на DataGrid?

Унаследуйтесь от DataGrid и в наследнике перекройте методы ProcessDialogKey() и ProcessKeyPreview() - в них и обрабатывайте нажатия.

26. Как вставлять разные control's в ListView?

Вот пример

27. Как в С# узнать имя локального хоста и его IP адрес?

//имя локального компьютера
string name = System.Net.Dns.GetHostName()

//его ip адреса (их может быть несколько)
System.Net.IPHostEntry he = System.Net.Dns.Resolve(name);
IPAddress[] al = he.AddressList;

28. ContextMenu с картинками?

У соответствующего MenuItem'a нужно поставить OwnerDraw в true и после этого можно рисовать в обработчике события MenuItem.DrawItem.
Подробней

29. Как в DataTable/DataView получить текущую запись?

BindingContext[dataSet.Tables["table_name"]].Current

30. Разбиение на страницы в DataGrid?

Необходимо вручную переключать страницы:

private void dgData_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
dgData.CurrentPageIndex = e.NewPageIndex;
BindGrid();
}
где BindGrid() - функция заполнения грида данными:
private void BindGrid()
{
System.Collections.ArrayList al = new System.Collections.ArrayList();
for(int i = 0; i < 45; i++)
al.Add(DateTime.Now.Millisecond());
dgData.DataSource = al;
dgData.DataBind();
} 
Hosted by uCoz