Generování tlačítek podle záznamů v databazi – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Generování tlačítek podle záznamů v databazi – Visual Basic – Fórum – Programujte.comGenerování tlačítek podle záznamů v databazi – Visual Basic – Fórum – Programujte.com

 

Hanes
~ Anonymní uživatel
28 příspěvků
30. 9. 2015   #1
-
0
-

Ahoj,

potřeboval bych alespoň navést pod čím mám hledat řešení následujícího problému:

Mám sešit v excelu. (jak propojit excel a VB a pracovat s nimi vím)

Rád bych pro každý řádek, který má nějaký zánam ve sloupci A, vygeneroval tlačítko, který by ten záznam mohlo vymazat.

Tedy potřebuji nějak dynamicky vytvářet tlačítka, nebo i jiné prvky.

Díky

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
30. 9. 2015   #2
-
0
-

#1 Hanes
List? Co vím, není potřeba komunikovat s Excelem - stačí hotový soubor zpracovat pomocí interních nástrojů .NET a následně číst buňky. No a každou přečtenou buňku zavést jako tlačítko do listu/pole/slovníku, ...

Nahlásit jako SPAM
IP: 78.136.177.–
Hanes
~ Anonymní uživatel
28 příspěvků
30. 9. 2015   #3
-
0
-

#2 Matěj Andrle
Aktuálně ke komunikaci s excelem používám

  Dim zdroj_stitky As String = tb_adresazdroje.Text
        Dim oExcel As Object
        oExcel = CreateObject("Excel.Application")
        oExcel.Workbooks.Open(zdroj_stitky)
        Dim oBook As Object
        Dim oSheet As Object
        oBook = oExcel.ActiveWorkbook
        oSheet = oExcel.Worksheets(1)

Jaké nástroje máte namysli?

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
30. 9. 2015   #4
-
0
-

#3 Hanes
Překvapivě myslím Excel Tools...

https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.cells.aspx

Nuže, co tedy řešit?

Nahlásit jako SPAM
IP: 78.136.187.–
Hanes
~ Anonymní uživatel
28 příspěvků
2. 10. 2015   #5
-
0
-

#4 Matěj Andrle
jsem schopen zavést hodnoty buňky A1 - A10 do pole. To co nevím, je jak vytvořit ve formůlaři tlačítka pro jednotlivé proměné v poli. Tedy když budu mít naplněny pouze buňky A1-A3, vytvoří 3 tlačítka, když všechny, tak deset. Po kliknutí vypíší hodnoty dané buňky.

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
2. 10. 2015   #6
-
0
-

#5 Hanes
Však zmíněnými nástroji - tedy načtením sešitu a použitím hoře zaslané vlastnosti tohoto sešitu se dostaneš ke všem buňkám. Projedeš cyklem - kde bude plno, tam vytvoříš tlačítko. (Pozici tlačítka získáš převedením pozice buňky.) Vážně nechápu, co řešíš.

Nahlásit jako SPAM
IP: 78.136.137.–
Hanes
~ Anonymní uživatel
28 příspěvků
2. 10. 2015   #7
-
0
-

#6 Matěj Andrle

Ještě nikdy jsem nevytvářel tlačítko příkazem.

Pokouším se jít cestou:

http://stackoverflow.com/questions/9502169/how-to-program-a-button-made-in-code

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
2. 10. 2015   #8
-
0
-

#7 Hanes
www.google.cz

new Button
{
Parent = mainForm,
Location = new Point(cellX, cellY)
};

nebo

Button ddd = new Button
{
Location = new Point(cellX, cellY)
};
mainForm.Controls.Add(ddd);
Nahlásit jako SPAM
IP: 78.136.146.–
Hanes
~ Anonymní uživatel
28 příspěvků
5. 10. 2015   #9
-
0
-

#8 Matěj Andrle
Pochopeno, využíváno.

Nyní řeším problém, že někdy vygeneruji víc labelů, než je můj monitor schopen zobrazit. Tedy že mám formulář až pod monitor. Můžu poprosit o nějaké vhodné řešení?

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
5. 10. 2015   #10
-
0
-

#9 Hanes
Tož - přetečení. (overflow) Stačí nastavit přetékanému elementu pevnou velikost (lze použít relativní - přepočtem z velikosti obrazovky, či tak) a následně zobrazit scrollbar(y). (Aby byly viditelné jen nutné scrollbary, lze použít hodnotu auto(matic).)

Nahlásit jako SPAM
IP: 78.136.167.–
Matěj Andrle+1
Grafoman
5. 10. 2015   #11
-
0
-

#9 Hanes
Jinak vlastnost Parent obsahuje stejný kód, jako níže. Tedy Parent obsahuje "this.Controls.Add(value);" -> kde this je mainForm.

Nahlásit jako SPAM
IP: 78.136.167.–
Hanes
~ Anonymní uživatel
28 příspěvků
8. 10. 2015   #12
-
0
-

#11 Matěj Andrle
Tak tentokrát ani google. To, že mi jeden vygenerovany btn reaguje na scrollbar není problém, jak ale donutím k pohybu všechny?

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
8. 10. 2015   #13
-
0
-

#12 Hanes
Cože? Scrollbar má být tam, kde jsou všechna tlačítka. Pokud jsou ve formuláři, pak scrollbar ve formuláři...

Nahlásit jako SPAM
IP: 78.136.168.–
Hanes
~ Anonymní uživatel
28 příspěvků
8. 10. 2015   #14
-
0
-

#13 Matěj Andrle
do formuláře vygeneruju btn1 - btnx

pomocí scrbaru Button_stroj.Top = VScrollBar1.Value (jen zkouším)  hybu jen tím posledním.

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
8. 10. 2015   #15
-
0
-

#14 Hanes
Totální kravina. Chceš seznam tlačítek - ty mají mít společného rodíče! No a ten rodič musí scrollovat... Jinak to nejde. Případně mohou mít až rodiče rodičů těch tlačítek stejného rodiče - ale zkrátka ta tlačítka musí tvořit celek - třeba panelem, třeba formulářem, ...

Nahlásit jako SPAM
IP: 78.136.168.–
Hanes
~ Anonymní uživatel
28 příspěvků
8. 10. 2015   #16
-
0
-

#15 Matěj Andrle
Super! Panel v panelu a lítá to. Dík

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
8. 10. 2015   #17
-
0
-

#16 Hanes
Proč nestačí panel ve formuláři?

Nahlásit jako SPAM
IP: 78.136.191.–
Hanes
~ Anonymní uživatel
28 příspěvků
8. 10. 2015   #18
-
0
-

potřebuji, aby se to v určitém místě schovávalo a byl vidět neustále text nad panelem1, panel2 se hýbe v něm

Nahlásit jako SPAM
IP: 88.103.236.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #19
-
0
-

#17 Matěj Andrle

Tak poprosil bych o další radu.

Má skupinu checkboxu 1-x a skupinu labelu 1-x vedle sebe

Pomocí:

  For Each checkbox As Control In Panel2.Controls
            If TypeOf checkbox Is CheckBox Then
                CType(checkbox, CheckBox).Checked = False
            End If
        Next

se mi daří zaškrtávat/ odškrtávat všechny checkboxy, které vygeneruju.

Nyní bych ale potřeboval např. po stisknutí tlačítka, změnit barvu pouze u těch labelů, které jsou zaškrtnuté.

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
9. 10. 2015   #20
-
0
-

#19 Hanes
Fuj! Tlačítka dávejte do pole (při generování) a procházejte ono pole! Na svázání s polem popisků (Labelů) bych použil vlastnost BindingContent, anebo Tag. (Pak při procházení pole CheckBoxů za pomoci oné vlastnosti vytáhneš i popisek.) Do Tagu by stačil index Labelu a hotovo. (popisky[(Int32)checkboxy[index].Tag])

Nahlásit jako SPAM
IP: 78.136.184.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #21
-
0
-

#20 Matěj Andrle
tím 1-x jsem měl namysli pole. Alespoň se domnívám:

 For i = 1 To citac - 1

            btn_manual = New Windows.Forms.Button
            btn_manual.Name = "btn_manual" & i
            btn_manual.Text = "M"
            btn_manual.Top = i * 20 - 4 - 16
            btn_manual.Left = 5
            btn_manual.Width = 20
            btn_manual.Height = 19
            btn_manual.FlatStyle = FlatStyle.Flat
            btn_manual.BackColor = Color.LightCoral
            Panel2.Controls.Add(btn_manual)

            AddHandler btn_manual.Click, AddressOf btn_manualClicked

            check_m = New Windows.Forms.CheckBox
            check_m.Name = "check_manual" & i
            check_m.Top = i * 20 - 19
            check_m.Left = 35
            check_m.Width = 20
            check_m.Height = 20
            Panel2.Controls.Add(check_m)
next

Zkusím. Díky

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
9. 10. 2015   #22
-
0
-

#21 Hanes
Pole je pole. Control[] -> to je pole. Takové musíš utvořit - v něm pak nakládat s prvky. Znáš vůbec pole, kolekce, ...?

Nahlásit jako SPAM
IP: 78.136.184.–
Matěj Andrle+1
Grafoman
9. 10. 2015   #23
-
0
-

#21 Hanes
 

popisky[(Int32)checkboxy[index].Tag]


Co na tom nechápeš? (Pole checkboxy a popisky naplníš při generování - jakož i vlastnost Tag. Tag bych naplnil hodnotou indexu, kterýžto bude stejný pro obě pole -> přiřadí tak 2 prvky z obou polí.)

Nahlásit jako SPAM
IP: 78.136.184.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #24
-
0
-

#22 Matěj Andrle
používám pouze ple promněnných. Controlo neznám, jestli mi pomůže, tak se naučím

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
9. 10. 2015   #25
-
0
-

#24 Hanes
Control je přeci základ pro všechny prvky formuláře. CheckBox is Control ; Label is Control ; ... No a jak jsem psal - oba prvky musíš hodit do pole. Čemu nerozumíš?

Nahlásit jako SPAM
IP: 78.136.184.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #26
-
0
-

#25 Matěj Andrle
Všemu novému, ale tak už to bývá. Kouknu na to a v pondělí budu otravovat s novým problémem, nebo plakat nad stejným. Zatím díky za rady.

Nahlásit jako SPAM
IP: 88.103.236.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #27
-
0
-

tak ať si to ulehčím tlačítek mým způsobem je správné? Můžu takhle vygenerované prvky strčit do pole, nebo bych měl použít jiný způsob?

Nahlásit jako SPAM
IP: 88.103.236.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #28
-
0
-

tak ať si to ulehčím. Generování tlačítek mým způsobem je správné? Můžu takhle vygenerované prvky strčit do pole, nebo bych měl použít jiný způsob?

Nahlásit jako SPAM
IP: 88.103.236.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #29
-
0
-

#26 Hanes
pořádně nevím, co mám hledat, nevíš o nějakém článku, který by mi osvětlil základy, které k tomu potřebuji.

Nahlásit jako SPAM
IP: 88.103.236.–
Hanes
~ Anonymní uživatel
28 příspěvků
9. 10. 2015   #30
-
0
-

#25 Matěj Andrle
pořádně nevím, co mám hledat, nevíš o nějakém článku, který by mi osvětlil základy, které k tomu potřebuji.

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
9. 10. 2015   #31
-
0
-

#30 Hanes
Hledej pole, list, slovník, hashtable, ... Tedy kolekci. Seznam - to je základ zkrátka. "VisualBasic pole seznamy" určitě dobře poslouží při hledání.

Nahlásit jako SPAM
IP: 89.235.57.–
Hanes
~ Anonymní uživatel
28 příspěvků
19. 10. 2015   #32
-
0
-

#31 Matěj Andrle
Tak to nejde. Nevím jestli jsem tak tupý, nebo líný, ale nejde mi najít funkční řešení. Dejde mi vytvořit pole tlačítek a kolekci jsem zvládl jen pro popisky.
 Mohl bys mi prosím v následujícím kodu upravit proceduru btn_manualClicked aby mi vyhodila popis labelu, který je vedle labelu?

Public Class Form1
    WithEvents lb_cislozakazky As Windows.Forms.Label
    WithEvents btn_manual As Windows.Forms.Button

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For i = 1 To 10
            btn_manual = New Windows.Forms.Button
            btn_manual.Name = "btn_manual" & i
            btn_manual.Text = "M"
            btn_manual.Top = i * 20 - 1 - 16 + i
            btn_manual.Left = 5
            btn_manual.Width = 19
            btn_manual.Height = 19
            btn_manual.TabIndex = i
            btn_manual.FlatStyle = FlatStyle.Flat
            btn_manual.BackColor = Color.LightCoral

            AddHandler btn_manual.Click, AddressOf btn_manualClicked

            lb_cislozakazky = New Windows.Forms.Label
            lb_cislozakazky.Name = "label" & i
            lb_cislozakazky.Text = "Popis " & i
            lb_cislozakazky.Top = i * 20 - 1 - 16 + i
            lb_cislozakazky.Left = 25
            lb_cislozakazky.Width = 150
            lb_cislozakazky.Height = 19
            lb_cislozakazky.TabIndex = i
            lb_cislozakazky.FlatStyle = FlatStyle.Flat

            Me.Controls.Add(lb_cislozakazky)
            Me.Controls.Add(btn_manual)
        Next
    End Sub
    Private Sub btn_manualClicked(ByVal sender As Object, ByVal e As EventArgs)
        MsgBox("Hi " & sender.tabindex)
    End Sub
End Class

Budu velice vděčný a určítě to lépe pochopím, když budu mít funkční příklad.

Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
19. 10. 2015   #33
-
0
-

#32 Hanes
https://msdn.microsoft.com/cs-cz/library/wak0wfyt.aspx

Nahlásit jako SPAM
IP: 78.136.148.–
Hanes
~ Anonymní uživatel
28 příspěvků
20. 10. 2015   #34
-
0
-

#33 Matěj Andrle
Tak hotovo! Funguje to tak jak požaduji. Mohl by ses na můj výtvor kouknout a říct, co by se dalo vytvořit jinak, elegantněji? (text v labelech bude načítan přes pole z excelovské databaze)

Public Class Form1
    Dim seznam_talcitek As New Dictionary(Of String, Button)
    Dim seznam_labelu As New Dictionary(Of String, Label)
    Dim seznam_checku As New Dictionary(Of String, CheckBox)


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For i As Integer = 1 To 10
            Dim butt As New Button
            butt.Height = 20
            butt.Width = 20
            butt.Left = 5
            butt.Top = i * 30 - 30
            butt.Text = i
            butt.Tag = i
            butt.TabIndex = i
            seznam_talcitek.Add(butt.TabIndex, butt)
            Me.Controls.Add(butt)
            AddHandler butt.Click, AddressOf Button_Click

            Dim label As New Label
            label.Name = i & "a"
            label.Height = 30
            label.Width = 100
            label.Left = 60
            label.Top = i * 30 - 30
            label.Text = i & " nevím"
            label.Tag = i
            label.TabIndex = i
            seznam_labelu.Add(label.TabIndex, label)
            Me.Controls.Add(label)

            Dim check As New CheckBox
            check.Name = i & "a"
            check.Height = 30
            check.Width = 100
            check.Left = 160
            check.Top = i * 30 - 35
            check.Text = i & " check"
            check.Tag = i
            check.TabIndex = i
            seznam_checku.Add(check.TabIndex, check)
            Me.Controls.Add(check)

        Next
    End Sub
    Private Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim butt As Button = sender
        Dim index As Integer
        index = sender.tabindex
        If seznam_checku(index).Checked = True Then
            Label1.Text = seznam_labelu(index).Text
        Else
            Label1.Text = "není označen check"

        End If

    End Sub

End Class
Nahlásit jako SPAM
IP: 88.103.236.–
Matěj Andrle+1
Grafoman
23. 10. 2015   #35
-
0
-

#34 Hanes
Namísto slovníku bych použil pole, jak již jsem ti psal. V Tagu index máš - tak nechápu, co vyvádíš se zbytečně složitým slovníkem. Velikost pole rovněž znáš - stačí alokovat pole a naplnit.

Jinak: Rozhodně změň přístup k pojmenovávání. Inspiruj se .NET Frameworkem a rozhodně si odpusť všechna ta divná individua. Namísto i dej index, namísto buttt kupříkladu actionButton, ...

Nahlásit jako SPAM
IP: 78.136.136.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý