Vytvoření CDialog viditelný




Snažím se dostat DialogBox s zaškrtávací políčko, až se objeví. to jsem přidal do souboru zdrojů, vytvořil dialogové šablonu a přidali rutinu třídy a události pro dialog. Jak jsem pochopil, teď už stačí jen vytvořit instanci třídy a volání DoModal ().







Takže jsem se vrátil a udělal nějaké vyšetřování a hrál s kódem nějaké, a to je to, co mám teď 

```
UsingMSPSK PSKDialog;

 if (PSKDialog.DoModal () == IDOK)
 {


 }
 else {
 AfxMessageBox ( Not IDOK);
 }
 CTempoDialog TempoDialog;


 if (TempoDialog.DoModal () == IDOK)
 {

 }




```

Když spustím to, jsem si žádný dialog z PSLDialog.DoModal () volání, ale mám AfxMessageBox, pak se objeví TempoDialog. Vstoupil jsem přes DoModal () volání v debuggeru a zdálo se, že běh a řádně vrátit, takže nemůžu přijít na to, kde je můj Dialog se děje.


Jen jsem se znovu podíval na zpáteční hodnotě DoModal () volání, a zdá se, že opouští hned, jak to mohu napravit?
Nejsem si jistý, proč se to stalo, ale políčko jsem přidal byl ovládací prvek ActiveX, a můj dialog to zlomilo. Když jsem se objevil panel panelu nástrojů, a táhl zaškrtávací políčko odtamtud, fungovalo to dobře.
<p>obecně platí, že byste měli používat dialogová okna pouze tehdy, když musíte. je výhodné použít přímou manipulaci nebo zadávání nebo úpravy na místě, kde uživatel pracuje přímo na datových objektech reprezentovaných v primárním okně. v případě vytváření objektů má přístup úpravy na místě buď:</p><ul> <li> <p>tlačítko vložit, které vytvoří objekt a přidá do datové mřížky prázdný řádek pro zadání hodnot pole,</p> </li> <li> <p>trvalý prázdný řádek v dolní části datové mřížky (nebo jinde) - pokud do ní uživatel zadá hodnoty, aplikace vytvoří nový objekt.</p> </li> </ul><p>srovnávám tyto dva přístupy so v odpovědi na otázku „ <a href="https://stackoverflow.com/questions/667539/whats-best-when-inserting-into-a-table-view-and-add-button-or-a-blank-line/669176#669176">co je nejlepší při vkládání do zobrazení tabulky, tlačítka přidat nebo prázdný řádek?</a> “</p><p>ve srovnání s přístupy upravenými na místě mají dialogová okna následující nevýhody:</p><ul> <li> <p>další učení. přidá do aplikace okno, jeho záhlaví a tlačítka (např. ok a storno) a pole - pole, která již často existují na nadřazené datové mřížce, ale jsou uspořádána jinak. to postupně zvyšuje to, co se uživatelé musí naučit.</p> </li> <li> <p>posun pozornosti. vyskakování dialogu vyžaduje, aby uživatel přesunul pozornost na něco nového, což má určité náklady na opětovnou orientaci a aby se uživatel cítil méně pod kontrolou dat.</p> </li> <li> <p>další kliknutí. dialogová pole je třeba provést a zrušit. to vyžaduje alespoň jedno kliknutí navíc. naproti tomu s úpravami na místě může uživatel před uložením vytvořit více objektů (pokud ukládání není automatické).</p> </li> <li> <p>modalita. pokud musíte mít modální dialogové okno, odstraňujete flexibilitu uživatele a nutíte uživatele dokončit vytvoření nebo jej opustit. pokud pro dokončení vytváření potřebují další informace odjinud v aplikaci, jsou nuceni zahodit veškerou práci, kterou odvedli.</p> </li> <li> <p>riziko ztráty práce. jedním neúmyslným kliknutím na tlačítko storno se vrací jakýkoli vstup, který uživatel provedl, a dialogové okno se zruší, což uživatele nutí začít znovu. ztráta více vstupů jediným kliknutím není charakteristická pro správně navržená primární okna a primární okna obvykle podporují zpět.</p> </li> </ul><p>dialogy by měly být použity pro atomové akce, které vyžadují parametry; to je situace, kdy aplikace musí mít určitý vstup od uživatele, aby mohla akci technicky nebo logicky dokončit. pokud například vytvoření objektu vyžaduje hodnoty polí, které nelze přednastavit, je pravděpodobně vhodné použít dialog.</p><p>takový dialog vytvořit by měl pravděpodobně obsahovat pouze povinná pole, nikoli žádná nepovinná. nechte uživatele vyplnit všechna volitelná pole zpět na datové mřížce. z důvodu modality a rizika ztráty práce by dialogy měly být co nejjednodušší. jako hrubé pravidlo by uživatel měl být schopen dokončit vstup za přibližně 20 až 30 sekund - to je přijatelné množství práce, kterou musí znovu provést.</p><p>máte pravdu, že ve webových aplikacích je samostatná vstupní stránka do značné míry ekvivalentní modálnímu dialogovému oknu, kde je uživatel nucen dokončit nebo zrušit transakci dříve, než učiní cokoli jiného. to dává mnoha webovým aplikacím neohrabaný „nepřímý“ pocit ve srovnání s tekutým pocitem ekvivalentu přímé manipulace s stolním počítačem.</p> <p>zkusili jste použít <a href="http://api.drupal.org/api/drupal/modules--field--field.api.php/function/hook\_field\_validate/7">hook\_field\_validate ()</a> ? (editovat) právě jsem si uvědomil, že nepoužíváte nové <a href="http://api.drupal.org/api/drupal/modules--field--field.module/group/field/7">field api</a> , ale pouze form api. možná to můžete postavit jako pole? pokud jste obeznámeni s form api v d6, můžete si za pár hodin vyzvednout field api. field api je další úroveň špatnosti.</p><p>mám vlastní pole, které zaznamenává pracovní dobu. mám nastaveno, že pokud je vybrán den do, musí existovat den ode dne. více či méně jsem implementoval příklad dávající v api.drupal.org.</p><pre><code>* implementation of hook\_field\_validate() */ function hours\_field\_validate($entity\_type, $entity, $field, $instance, $langcode, $items, &amp;$errors) { foreach ($items as $delta =&gt; $item) { if ($item['end\_day'] != '--' &amp;&amp; $item['start\_day'] == '--') { $errors[$field['field\_name']][$langcode][$delta][] = array( 'error' =&gt; t('a from day needs to be choosen if a to day is selected. if they are the same -- forexample, monday and monday, the whole line when viewed will only be for monday.'), ); } } } </code></pre> <p>existují dva způsoby, jak toho dosáhnout:</p><ol> <li>pokud informace o vašem sloupci leží v uzlu, můžete ve svém uzlu použít <a href="http://drupal.org/project/computed\_field">computed fields</a> k vytvoření některých nových cck polí se všemi druhy operací uvnitř (tam kódujete přímo v php s přístupem ke všem ostatním polím pokud jste dostatečně dobrodružní, můžete také provádět dotazy a vše, co si dokážete představit.</li> <li>podobná funkčnost existuje přímo pro zobrazení, nazývá se <a href="http://drupal.org/project/views\_customfield">vlastní pole zobrazení</a> a je to v zásadě výpočetní pole pro zobrazení.</li> </ol><p>abychom to shrnuli, pokud potřebujete, aby se tyto informace objevovaly v uzlu, pak se vypočítalo pole, ne-li jen použijte vlastní pole zobrazení.</p> <p>můžete zvolit zobrazení dotazu; je to zaškrtávací políčko nazvané „zobrazit dotaz sql“ na stránce nastavení zobrazení (správce/struktura/zobrazení/nastavení).</p> <p>zní to, jako byste hledali modul <a href="http://drupal.org/project/custom\_formatters">vlastní formátovače</a> , velmi podobný kontemplate, ale konkrétně pro vytváření formátů polí, které budou použity prostřednictvím stránky nastavení zobrazení nebo pohledy.</p><p>vlastní formátovače mohou být vytvořeny jak s tokeny, tak s čistým php kódem).</p><p>kromě toho lze vlastní formáty exportovat jako nativní drupal háčky nebo ve exportovatelném formátu vlastních funkcí).</p> <p>pokud potřebujete přidat opakovaně použitelnou metodu pro přidání textu, můžete vytvořit novou šablonu style/controltemplate, která obsahuje další blok textblock pro zobrazení textu. chcete-li nastavit text na pruhu průběhu, můžete přenést vlastnost textsearch.text. </p><p>pokud to nemusí být opakovaně použitelné, jednoduše umístěte ukazatel průběhu do mřížky a přidejte do mřížky textový blok. vzhledem k tomu, že wpf může skládat prvky dohromady, bude to fungovat pěkně.</p><p>pokud chcete, můžete vytvořit usercontrol, který zpřístupní progressbar a textblock jako veřejné vlastnosti, takže by bylo méně práce než vytvoření vlastní šablony controltemplate.</p> Combobox by mel mit udalost "SelectionChangeCommitted".   
Na tu musis navazat nejakou metodu. Bud si to naklikas v designeru, nebo to muzes i napsat:  
"comboBox1.SelectionChangeCommitted += new EventHandler(comboBox1\_SelectionChangeCommitted);"  
A pak v metode "private void comboBox1\_SelectionChangeCommitted(object sender, EventArgs e)" jednoduse nastavis co bude potreba.  
if (comboBox1.SelectedIndex == 0) textbox1.Text="12354354";  
  
A jestli ti nevyhovuje selectedindex, tak vyuzij jinou hodnotu selected* I kdyby se vbox ztratil, je tam zalozni soubor pred posledni zmenou, jestli jsi jej fikane neprepsal stejne pojmenovanym strojem.Je to obycejne XML, takze si to otevri v textaku, nastuduj si, jak se tam eviduji snimky a dopln si do nej informace. <p>mohli byste něco udělat s <a href="http://drupal.org/project/views\_customfield">views\_customfield</a> .</p><p>přidáte pole php, dostanete ho pouze pro zobrazení požadované značky (bez prvků) a na výstup hodnoty pouze pro číslo řádku 1.</p> <p>řešením je přidání hovoru do <a href="https://api.drupal.org/api/drupal/includes%21file.inc/function/file\_usage\_add/7">file\_usage\_add</a> po uložení souboru. toto volání přidá odkaz na soubor v databázi. funkce <a href="http://api.drupal.org/api/drupal/modules--file--file.module/function/file\_managed\_file\_validate/7">file\_managed\_file\_validate</a> vyhledá odkaz a nespustí chybu.</p><pre><code>file\_usage\_add($file, 'foo', 'foo', $foo-&gt;id); </code></pre><p>to není zdokumentováno v <a href="http://api.drupal.org/api/drupal/developer--topics--forms\_api\_reference.html/7#managed\_file">form api v příkladu manag\_file</a> .</p><p>tento problém je diskutován v otázkách dokumentace drupal dokumentace: <a href="http://drupal.org/node/979158">link</a> </p>