PDA

Показать полную графическую версию : Visual Basic 2008


Страниц : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18

Admiral
01-06-2008, 15:46
Тоже что и комбинация Ctrl+Z в большинстве программ, возвращает предыдущие значение.
Только я, когда с примера переписывал, ошибся. Это свойство нужно применять к RichTextBox1, после того как всё найдено и подкрашено, что б убрать покраснение.

Uzvern
03-06-2008, 20:38
Что делает эта функция : CStr()

Admiral
03-06-2008, 21:55
CStr Function (http://msdn.microsoft.com/en-us/library/0zk841e9.aspx)
Функция CStr (http://translate.google.com/translate?u=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2F0zk841e9.aspx&hl=en&ie=UTF8&sl=en&tl=ru)

Uzvern
03-06-2008, 22:46
Сорри. Затупил :rolleyes:

Uzvern
08-06-2008, 19:23
Как прописать в тексе ковычки " ?

Все. Разобрался -)

***.Text = """"

Как можно сделать прозрачный цвет у формы?

И как можно написать самое6 просто приложение : Клиент - Клиент, клиент - сервер

mrcnn
08-06-2008, 19:57
Аж четыре кавычки. Нормально реализовать изобреаттелям языка было видимо лень. Лучше бы в виде эскейп последовательностей сделали а не в виде какой-то фигни. Эскейп-последовательности гораздо важнее подсветки синтаксиса и синтаксической проверки на лету. В бейсике все через ж. Лучше на асме писать, чем на бейсике. Там хоть и муторно, но нет таких дбл конструкций как в бейсике и компиляторы нормальная и среда, которая не делает дбл почерки и подчерки. .




Второй способ вставить кавычку Chr(34) этот способ предпочтительнее

Третий способ использовать хак: (replace(string,"'","''"))

Четвертый способ:
Подключить регулярные выражения

Imports System.Text.RegularExpressions
Regex.Escape("\"")

Admiral
08-06-2008, 20:32
Ну почему же сразу не придумали? Просто VB программисту проще, наверное, действовать методом проб и ошибок: ага две кавычке как служебные, три как ошибка, ну а на четыре компиллер наконец поймёт чего надобно.
Есть конечно же эстетическое решение: с помощью функции Char (http://msdn.microsoft.com/en-us/library/system.char_members(VS.85).aspx) у которой есть метод ConvertFromUtf32 (http://msdn.microsoft.com/en-us/library/system.char.convertfromutf32(VS.85).aspx), перевода ASCII кода в соответствующий табличный стиль. Кто таблицу не помнит, здесь всё же участник помнил, есть функция Asc, которая возвращает код символа согласно таблице ASCII. Да придётся ещё раз забомбить четыре раза кавычки, что б узнать ответ - MsgBox(Asc("""")), кому понравились они и хочется писать запутанный код и вовсе может использовать что-то на подобии MsgBox(Char.ConvertFromUtf32(Asc(""""))), а эстетам всё же предложу MsgBox(Char.ConvertFromUtf32(34)), где 34 это код кавычек.

mrcnn, для C# (скрин из которого был в этой теме (http://forum.oszone.net/thread-108118.html)) по подчёркиваниям решение уже найдено в теме.

Uzvern
09-06-2008, 19:53
Помогите плз. Вообщем необходимо вывести сообщение с первой буквой из каждой строки.
Public Class Form1
Dim i1 As String
Dim i2 As Long = -1
Dim i3 As String
Dim i4 As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
i1 = RichTextBox1.Text
Do Until i2 = RichTextBox1.Lines.Length
i2 = i2 + 1
i3 = RichTextBox1.Lines(i2).Substring(0, 1)
i4 = i3 & Chr(13)
Loop
MsgBox(i4)
End Sub
End Class

Не могу понять почему не хочет. + Со списком жестких дисков такое же.

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim h As Integer = -1
Do Until h = My.Computer.FileSystem.Drives.Count
h = h + 1
RichTextBox1.Text = RichTextBox1.Text & My.Computer.FileSystem.Drives(h).Name
Loop
End Sub
End Class

Admiral
09-06-2008, 22:48
Dim h As Integer = -1 »
Из каких соображений -1?
-1 всё же нужно, но в другом месте
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim h As Integer = 0 REM а вдруг дисков вообще нет :), из концепции безопасного кода
Do Until h = My.Computer.FileSystem.Drives.Count - 1 REM нумерация с нуля, так что на один элемент меньше
h = h + 1
RichTextBox1.Text = RichTextBox1.Text & My.Computer.FileSystem.Drives(h).Name
Loop
End Sub

Uzvern
09-06-2008, 23:21
REM »
Это что такое?

Кстати, как можно определить состояник курсора в строке, т.е. в какой он позиции.

Admiral
10-06-2008, 01:03
Uzvern, REM это ж основа всего, коменты в коде после этого можно писать дальше по строчки. Тоже что и ' но в топике немного сливается, так что запостил через этот оператор.

Если он вне программы, то есть форма не активна, то без написания драйвер хука никак. А так с помощью свойства e., оно уже встречалось в теме.

Uzvern
10-06-2008, 11:09
Мне нужно отловить положение курсора когда текст печатается.

Можешь показать на примере? Просто я пробовал с е., чет нифига не лоучается.

Admiral
10-06-2008, 17:04
А ну это другое дело, только тогда в этом случаи терминологически надо говорить про положения каретки, а не курсора (координаты которого передаёт e.)
Private Sub RichTextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
Dim Position As Integer = Me.RichTextBox1.SelectionStart
Dim Line As Integer = Me.RichTextBox1.GetLineFromCharIndex(Position)
Dim Col As Integer = Position - Me.RichTextBox1.GetFirstCharIndexOfCurrentLine
Label1.Text = Position & " " & Line & " " & Col
End Sub
А насчёт глобальной отловки курсора, то теперь (в отличии от VB6) не надо никакого Хука (по видимому он уже в нёдрах НЕТА), так что отловить его возможно, даже когда окно не активно или когда его и вовсе нет
Label1.Text = MousePosition.X & " " & MousePosition.Y

Uzvern
10-06-2008, 19:55
Как сделать цвету формы прозрачным?

Admiral
11-06-2008, 03:17
Вроде .NET добавил такую возможности компонентам (контролям), только для формы не предусмотрели :)
И выходит что код Me.BackColor = Color.Transparent на выполнении вызывает ошибку
Control does not support transparent background colors.
Чуть по сложнее будет так
Me.BackColor = System.Drawing.Color.Magenta
Me.TransparencyKey = System.Drawing.Color.Magenta

Только теперь в самом деле окно будет прозрачное, даже для кликов мыши (но не для клавы). Элементы, если не указав им цвет явно, тоже станут прозрачными, так что для каждого елемента прийдётся прописать BackColor (TransparencyKey по желанию).

Если лёгкие пути не для тебя и/или влом прописывать для всех элементов их цвета, то тогда есть арсенал реализации VB6/Delphi6 и не такого частного случая.
Техника программирования сложных окон в Visual Basic (http://www.vbnet.ru/articles/showarticle.aspx?id=22) Генератор кода Form GENERATOR 1.5 (http://mirsofta.ru/index.php?id=1053765846) по принципу описанному в статьи.
Впервые о технологии написания, а вернее рисования, нестандартных окон я узнал их этой статьи
Delphi: Безбашенные окна (http://www.xakep.ru/magazine/xa/049/084/1.asp). Несмотря на то, что там описано для Delphi я всё же рекомендую к чтению, поскольку описаны нюансы работы с такими окнами.

Admiral
11-06-2008, 13:35
Весьма странно, что начинает прыгать и не выполнять выборку по Case. Тем не менее, ответ по избавлении от 9 Or 10 Or 12 Or 13 одним махом
Case Else
GoTo generaciya
Остальные комментарии в коде

Public Class Form1
Dim i As Integer
' Dim v As Integer = 0 REM Оно нужно только для цикла, пускай там и создаётся
'...
Private Sub ret()
'Do Until v = 20 REM Чем обусловлен выбор именно этого цикла?
'v = v + 1 REM Если использовать For данной строчки не потребуется
REM For и буду использовать
For v As Integer = 0 To 20
generaciya:
i = Int(Rnd() * 190 + 1)
Select Case i
Case 1 To 8
RichTextBox1.Text = RichTextBox1.Text & Chr(i)
Case 11
RichTextBox1.Text = RichTextBox1.Text & Chr(i)
Case 14 To 190
RichTextBox1.Text = RichTextBox1.Text & Chr(i)
'Case 9 Or 10 Or 12 Or 13 REM Если интересуют значение только 1-8, 11, 14-190 то здесь выборку не стоит делать, а написать
Case Else
GoTo generaciya
End Select
Next v
End Sub
'...

Хороший пример, что б показать как можно комбинировать операторы-комментаторы. Rem я использую - когда явно пишу комментарии, а ' - для отключения строчек кода.

Uzvern
11-06-2008, 18:16
Admiral, неа. Все-равно 10-ка проскакивает! :(

Admiral
11-06-2008, 19:03
Да уж. Первый самый код должен был нормально отработать, но идеологически боролся с последствиями, а не с причиной.
Вот следующий код ни шагу не даст i пока не убедится, что она не принимает нежелательных значений

For v As Integer = 0 To 20
Do
i = Int(Rnd() * 190 + 1)
Loop Until (i <> 9) And (i <> 10) And (i <> 12) And (i <> 13)
If i = 10 Then Debug.Print(i)Rem это контрольная строчка для проверки через Immediate Window появления значения i 10
REM подробнее про это окно здесь ->http://msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
RichTextBox1.Text = RichTextBox1.Text & Chr(i)
Next v

Uzvern
11-06-2008, 20:45
Admiral, ты не поверишь...но она все-равно проскакивает! :laugh:
Вот, залью проект. Может чего с кодом накосматил...
http://slil.ru/25889104

Объясни пожалуйса поподробней что это и как это можно использовать
Debug.Print()

mrcnn
11-06-2008, 21:36
Uzvern
Критерий правильности: отсутствие появления перехода на новую строку?
Отключи тогда еще 11

Loop Until (i <> 9) And (i <> 10) And (i <> 12) And (i <> 13) And (i <> 11)


Debug.Print работать будет по видимому только в поздних студиях




© OSzone.net 2001-2012