Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальное копирование\вставка в буфер обмена, Копирование вставка 
V
    Опции темы
diadiavova
Дата 24.10.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(omankit @  24.10.2008,  17:15 Найти цитируемый пост)
А на счет хендлера попробую в понедельник до меня смысл дошел я и не знал что так можно спасибки. 

На самом деле это стандартная операция, WithEvents - штука очень удобная, особенно если в дизайнере используется, только я думаю, что это наследие старого васика. Кроме AddHandler ещё прочитай про RemoveHandler - обратная операция. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 25.10.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Кстати: я тут одну штуку обнаружил, оказывается у формы по-умолчанию свойство KeyPreview имеет значение False. Поэтому она у тебя и не ловит события клавиатуры. Поменяй значение  - будет ловить(хотя ИМХО - лучше этого не делать).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
omankit
Дата 28.10.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



ИТОГОВЫЙ КОД!!!!!!!!!!!
Код

    Public Sub FillKeyUpSubToControls(ByVal ctl As Control)
        For Each con As Control In ctl.Controls
            If TypeOf con Is TextBox Then
                Dim tb As TextBox = CType(con, TextBox)
                AddHandler tb.KeyUp, AddressOf ControlKeyApp
            ElseIf TypeOf con Is ContainerControl Then
                FillKeyUpSubToControls(con)
            ElseIf TypeOf con Is SplitterPanel Then
                FillKeyUpSubToControls(con)
            End If
        Next
    End Sub

    Public Sub ControlKeyApp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        If TypeOf sender Is TextBox Then
            Dim ActiveTextBox As TextBox = CType(sender, TextBox)
            If e.KeyCode = Keys.C AndAlso e.Control Then
                My.Computer.Clipboard.SetText(ActiveTextBox.SelectedText)
            End If
            If e.KeyCode = Keys.V AndAlso e.Control Then
                ActiveTextBox.SelectedText = My.Computer.Clipboard.GetText
            End If
        End If
    End Sub
PM MAIL ICQ   Вверх
diadiavova
Дата 28.10.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Я же написал насчёт ConteinerControl, что зря его использовал, и привёл исправленный вариант кода, в котором всё учтено.
Перечитай


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
omankit
Дата 29.10.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Цитата(diadiavova @  28.10.2008,  17:49 Найти цитируемый пост)
Я же написал насчёт ConteinerControl, что зря его использовал, и привёл исправленный вариант кода, в котором всё учтено.Перечитай

 
в смысле так? 
Код


 Public Sub FillKeyUpSubToControls(ByVal ctl As Control)
        For Each con As Control In ctl.Controls
            If TypeOf con Is TextBox Then
                Dim tb As TextBox = CType(con, TextBox)
                AddHandler tb.KeyUp, AddressOf ControlKeyApp
            ElseIf con.Controls.Count > 0 Then
                FillKeyUpSubToControls(con)
            End If
        Next
 End Sub


Добавлено через 5 минут и 4 секунды
я конечно понимаю что это временное решение почему может все это дело не работать на автомате????? и выделение и копирование??? где можно такой касяк сделать чтобы это все сдохло??
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



В смысле так, я же ссылку оставил
Код

    Protected Sub WatchContainer(ByVal container As Control)
        For Each Con As Control In container.Controls
            'Проверяем тип Con и выполняем нужную обработку
            If  Con.Controls.Count > 0 Then
                WatсhContainer(Con)
            End If
        Next
    End Sub

Про автоматы поясни, ничего не понял.

Это сообщение отредактировал(а) diadiavova - 29.10.2008, 12:33


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
omankit
Дата 29.10.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



вот создаю я проект и все в нем работает копируется выделяется мышкой и без дополничельных эвантов. А здесь это ничего не работает. И как понять где глюк я не знаю. может есть какой нибудь способ определить где блокируется

Добавлено @ 13:47
Я так понимаю что глюк гдето здесь!!

Из того что я понял тут происходит получение кода стороки где прописано название формы и свойства и контрол который будет контейнером для нее. Может определяется что не правильно? Потому что если запустить форму в обход кода этого начинает работать все. Вот с этим сейчас и копаюсь.
Код

Imports System.Reflection
Imports System.Xml

Public Class EmbedFormSetting
'Класс обрабатывает меню и настройки приложения, открытие внутренних форм


    Private m_SettingsDataSet As New dsMenuItems
    Private m_MenuXmlFile As New XmlDocument
    '  Public frm As Form

    Public Sub New(ByVal RowName As String)
        ' Конструктор получает имя строки в файле ресурсов
        Dim taMenuItem As New dsMenuItemsTableAdapters.MenuItemSettingsTableAdapter
        taMenuItem.Fill(dsSetting.MenuItemSettings)
        Dim MenuLoad As New LoadRes()
        m_MenuXmlFile = MenuLoad.GetXmlFile(RowName)
    End Sub

    Private Property dsSetting() As dsMenuItems
        'Работает с датасетом таблицы настроек
        Get
            dsSetting = m_SettingsDataSet
        End Get
        Set(ByVal value As dsMenuItems)
            m_SettingsDataSet = value
        End Set
    End Property


    Public Sub ShowForm(ByRef index As Integer, ByRef Container As Object)
        'Открывает форму по индексу в таблице настроек и выводит в заданном контейнере
        Try
            If index > 0 Then
                Dim FindedRows() As DataRow = dsSetting.MenuItemSettings.Select("[Код]=" & index)
                If FindedRows.Length = 1 Then
                    Dim strFormName As String = FindedRows(0).Item(2).ToString
                    If FindedRows(0).Item(3).ToString.Length > 0 Then IntSecurity.Atribute = FindedRows(0).Item(3).ToString
                    Dim asm As Assembly = Assembly.GetExecutingAssembly
                    Dim asmName As String = asm.GetName().Name
                    Dim frm As Form
                    frm = CType(asm.CreateInstance(asmName & "." & strFormName), Form)
                    frm.TopLevel = False
                    frm.FormBorderStyle = CType(FindedRows(0).Item(6), FormBorderStyle)
                    If CBool(FindedRows(0).Item(7)) Then frm.Dock = DockStyle.Fill
                    frm.Parent = CType(Container, Control)
                    frm.Show()
                    frm.BringToFront()
                End If
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub

    Public ReadOnly Property MenuXmlFile() As XmlDocument
        'Возвращает XML файл меню
        Get
            MenuXmlFile = m_MenuXmlFile
        End Get
    End Property

End Class



вообщем фишка как я понимаю в чем. надо показать форму привязанную к сплит панели2 главной формы, а в спилт панели1 этого же сплитконтейнера главной формы находится меню для выбора форм вот так. И при этом коде слитают функции системы вот где не разобрался толи при toplevel толи при parent 

Это сообщение отредактировал(а) omankit - 29.10.2008, 15:06
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(omankit @  29.10.2008,  13:43 Найти цитируемый пост)
frm = CType(asm.CreateInstance(asmName & "." & strFormName), Form)

А ет чиво, я извиняюсь, тако есть? При такой логике ошибиться не мудрено. Кроме того ты предлагаешь мне проанализировать фрагмент чужой проги, при том, что я не вижу целого и не знаю твоих замыслов.

Сохранять типы объектов в виде строки надо не так.
Код

Dim strType As String = Form1.GetType().ToString()

У тебя сохранится информация и о сборке, и о типе.
Восстановить тоже не проблема(напишу по памяти, если не сработает пиши - иправлю)
Код

Dim t As Type = Type.GetType(strType)'по-моему так
Dim obj As Object = Activator.CreateInstance(t)

Далее переменную obj конвертить куда надо
Тут направление правильное, где-то мог напутать в деталях - студию только закрыл, открывать неохота.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
omankit
Дата 29.10.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Код

frm = CType(asm.CreateInstance(asmName & "." & strFormName), Form)
 -- здесь получается форма по строковому ее названию strFormName.

Код

  frm.TopLevel = False
   frm.FormBorderStyle = CType(FindedRows(0).Item(6), FormBorderStyle)
   If CBool(FindedRows(0).Item(7)) Then frm.Dock = DockStyle.Fill
   frm.Parent = CType(Container, Control)
   frm.Show()
   frm.BringToFront()
--а потом привятзывается к контролу splitcontainer.panel2 главной формы, все работает тока сваливаются системные функции smile 



вообщем фиха как раз в toplevel а если не ставить то не прикручивается форма к контролу ххх чего же делать.

Нужно подцепить на нее все функции системы. Интересный вопрос?

Это сообщение отредактировал(а) omankit - 29.10.2008, 16:59
PM MAIL ICQ   Вверх
diadiavova
Дата 29.10.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(omankit @  29.10.2008,  15:11 Найти цитируемый пост)
здесь получается форма по строковому ее названию strFormName.

А что мешает хранить в базе полное имя класса? Зачем эти сложности с именем сборки и прочее? CreateInstance принимает полное имя класса - вот и храни его, если имя класса завязано на имени сборки это только усложнит жизнь. Код надо делать проще, тогда и баги искать легче.

А зачем форму к контролу привязывать? Привяжи к форме на которой контрол находится (свойство Owner) , да и потом, если подписаться на событие контрола, то не важно какой у него парент или левел. Я уже писал(и не только я), что если тебя интересует контрол - подписывайся на его события.
А если я чего-то не понял, то ты плохо объяснил. 

Да, ещё... Эт щто? Если количество строк 1 - код выполняется. А если 2?
Цитата(omankit @  29.10.2008,  13:43 Найти цитируемый пост)
If FindedRows.Length = 1 Then


Цитата(omankit @  29.10.2008,  13:43 Найти цитируемый пост)
ообщем фишка как я понимаю в чем. надо показать форму привязанную к сплит панели2 главной формы, а в спилт панели1 этого же сплитконтейнера главной формы находится меню для выбора форм вот так. И при этом коде слитают функции системы вот где не разобрался толи при toplevel толи при parent 

А как ты формы ищешь? Как чего привязываешь, что слетает? Ничего не ясно. Какой помощи ты ждёшь я тоже не понял. Постарайся изложить проблему с учётом того, что я твоего проккта не видел, и не знаю, твоей задумки.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
ProgrammingLife
  Дата 3.11.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.1.2008
Где: ЧИРЧИКАГО (UZ)

Репутация: нет
Всего: нет



а на С# есть код!?
PM MAIL ICQ   Вверх
diadiavova
Дата 3.11.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(ProgrammingLife @  3.11.2008,  20:14 Найти цитируемый пост)
а на С# есть код!?

Какой именно?


Это сообщение отредактировал(а) diadiavova - 3.11.2008, 20:18


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
omankit
Дата 7.11.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Вообщем переделал интерфейс так чтобы можно было использовать MDI формы. Теперь все работает. За копирование/всавку через ctrl+с ctrl+v. diadiavova отдельное спасибо что объяснил как это работает. А привязку формы к контролу разбирать не буду. все равно где нить через год на WPF перейду полностью.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.